Aprenda WebSocket com Node.js

Neste tutorial, você verá:
✔️ Comunicação em tempo real com WebSocket e Node.js
✔️ Configurar um domínio para acesso do seu aplicativo com ssl
📌 Simplifique seu processo de deploy com o nosso painel ICP!
Hoje, eu vou te mostrar como criar um projeto simples em Node.js usando o Websocket e publicá-lo na internet com um domínio próprio. Se você sempre quis colocar seu site online de forma profissional, esse tutorial é pra você!
📌 Passo 1: Iniciar um projeto Node.js
npm init -y
📌 Passo 2: Instalar dependências
npm install express socket.io
📌 Passo 3: Crie o arquivo server.js com o seguinte conteúdo:
// Vamos importar o modulos para uso!
// express: Um framework web para Node.js que simplifica a criação de servidores HTTP.
// http: Módulo nativo do Node.js para criar servidores HTTP.
// socket.io: Biblioteca para comunicação em tempo real através de websockets.
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
//app: Aqui, criamos uma instância do aplicativo Express.
//server: Criamos um servidor HTTP usando a instância do Express. Isso nos permite usar o Express para roteamento e middleware, enquanto ainda permite que o socket.io "escute" no mesmo servidor.
//io: Esta é a instância do servidor Socket.io, que vai escutar as conexões websocket no nosso servidor HTTP.
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
// Esta é uma rota do Express para o endpoint / (raiz/dominio).
//Quando um usuário acessa a raiz do nosso servidor (http://seudominio.com.br/), o Express envia o arquivo index.html que está no diretório atual (__dirname é uma variável global em Node.js que aponta para o diretório do arquivo em execução).
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});
// io.on('connection', (socket) => {...}: Este código define um ouvinte para o evento connection. Esse evento é disparado sempre que um novo cliente se conecta ao servidor via socket.io. O parâmetro socket representa a conexão individual do cliente.
// socket.on('chat message', (msg) => {...}: Aqui, definimos um ouvinte para o evento personalizado chat message. Este evento é emitido pelo cliente quando uma nova mensagem é enviada. Quando recebido, emitimos o mesmo evento para todos os clientes conectados com io.emit('chat message', msg). Isso significa que, quando um cliente envia uma mensagem, todos os outros clientes recebem essa mensagem.
// socket.on('disconnect', () => {...}: Este é um ouvinte para o evento disconnect, que é disparado quando o cliente se desconecta do servidor.
io.on('connection', (socket) => {
console.log('Usuário conectado');
socket.on('chat message', (msg) => {
io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('Usuário desconectado');
});
});
// Aqui será a porta que o PM2 irá colocar automaticamente!
// Deixe assim para funcionar na Integrator Host
//const PORT = process.env.PORT
const PORT = 3100;
server.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
📌 Passo 4: Crie o arquivo index.html com o seguinte conteúdo:
<!doctype html>
<html>
<head>
<title>Exemplo - Integrator Host - Node.js - Websocket </title>
<style>
/* Estilização básica para o chat */
ul {
list-style-type: none;
margin: 0;
padding: 0;
}
li {
margin-bottom: 10px;
list-style-type: none;
}
</style>
</head>
<body>
<!--
<ul id="messages">: Esta é uma lista não ordenada onde as mensagens do chat serão exibidas.
Ela começa vazia e será preenchida dinamicamente pelo JavaScript.
-->
<ul id="messages"></ul>
<!--
<input id="input" autocomplete="off">: Um campo de entrada onde o usuário digitará sua mensagem.
<button>: Um botão que, quando clicado, enviará a mensagem.
-->
<form id="form" action="">
<input id="input" autocomplete="off" /><button>Enviar Mensagem</button>
</form>
<!--
O primeiro script é a biblioteca cliente do socket.io. Esta é a contraparte do cliente da biblioteca socket.io usada no servidor.
O segundo script é a biblioteca jQuery, uma popular biblioteca JavaScript que facilita a manipulação do DOM e o tratamento de eventos.
-->
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<!--
1) const socket = io();: Esta linha cria uma conexão websocket para o servidor usando a biblioteca socket.io.
2) $('form').submit(function(e) {...}: Este é um ouvinte de evento para o evento de envio do formulário. Ele usa jQuery para definir o ouvinte.
3) e.preventDefault();: Impede que o formulário seja enviado da maneira tradicional (recarregando a página).
4) socket.emit('chat message', $('#input').val());: Emite um evento chat message através do socket com o valor da mensagem digitada pelo usuário.
5) $('#input').val('');: Limpa o campo de entrada após a mensagem ser enviada.
6) socket.on('chat message', function(msg) {...}: Este é um ouvinte de evento para receber mensagens de chat do servidor. Quando uma mensagem é recebida, ela é adicionada à lista de mensagens.
-->
<script>
const socket = io();
$('form').submit(function(e) {
e.preventDefault(); // Impede o formulário de ser enviado normalmente
socket.emit('chat message', $('#input').val());
$('#input').val('');
return false;
});
socket.on('chat message', function(msg) {
$('#messages').append($('<li>').text(msg));
});
</script>
</body>
</html>
📌 Passo 5: Rodar a aplicação.
Inicie o projeto:
node server.js
Acessar ele localmente:
http://localhost:3100
Você pode abrir múltiplas abas para simular diferentes usuários interagindo com o chat em tempo real.
📌 Passo 6: Publicar o seu aplicativo Node.js online com um domínio com SSL.
Para isso vamos usar o Painel ICP, no video abaixo mostramos todo o processo de forma simples e rápida.