WebSocket em Node.js: biblioteca ws para tempo real

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca ws: WebSocket para Node.js



A biblioteca ws é uma implementação simples, rápida e totalmente testada do protocolo WebSocket para Node.js. Ela é o padrão de facto para criar aplicações em tempo real (chats, jogos online, notificações, edição colaborativa) no lado do servidor em JavaScript. Ao contrário do módulo http integrado, o ws fornece comunicação bidirecional completa entre cliente e servidor sem requisições HTTP constantes.



Principais funcionalidades

  • Suporte completo ao protocolo RFC 6455 — funciona com todos os navegadores modernos.
  • Alta performance — consumo mínimo de memória e baixa latência.
  • API simples — criação de servidor e cliente em poucas linhas de código.
  • Suporte a extensões — compressão de dados (permessage-deflate).
  • Integração com servidor HTTP — pode compartilhar porta com Express ou outro framework.
  • Reconexão automática — mecanismos integrados para o cliente.


Instalação

Instalação via npm:

npm install ws

Após a instalação, a biblioteca está pronta para uso.



Criação de um servidor WebSocket

Vamos criar um servidor simples que aceita conexões e envia uma mensagem de boas-vindas:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) { console.log('Novo cliente conectado');

// Envia mensagem para o cliente ws.send('Bem-vindo ao servidor WebSocket!');

// Processa mensagens recebidas ws.on('message', function incoming(message) { console.log('Recebido: %s', message); // Envia de volta (eco) ws.send('Eco: ' + message); });

// Processa fechamento da conexão ws.on('close', function() { console.log('Cliente desconectado'); });});

console.log('Servidor WebSocket rodando em ws://localhost:8080');


Criação de um cliente WebSocket

O cliente se conecta ao servidor, envia uma mensagem e recebe a resposta:

const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', function open() { console.log('Conexão estabelecida'); ws.send('Olá, servidor!');});

ws.on('message', function incoming(data) { console.log('Resposta do servidor: %s', data); ws.close();});

ws.on('close', function() { console.log('Conexão fechada');});

ws.on('error', function error(err) { console.error('Erro:', err.message);});


Trabalhando com JSON e múltiplos clientes

Exemplo real — um servidor de chat que distribui mensagens para todos os clientes conectados (broadcast):

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws, req) { console.log('Cliente conectado. Total de clientes:', wss.clients.size);

ws.on('message', function incoming(message) { // Faz o parse do JSON let data; try { data = JSON.parse(message); } catch (e) { ws.send(JSON.stringify({ error: 'JSON inválido' })); return; }

// Distribui para todos, exceto o remetente wss.clients.forEach(function each(client) { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(JSON.stringify({ username: data.username, text: data.text, timestamp: Date.now() })); } }); });

ws.send(JSON.stringify({ system: 'Bem-vindo ao chat!' }));});

O cliente pode enviar JSON:

ws.send(JSON.stringify({ username: 'Alice', text: 'Olá a todos!' }));


Integração com servidor HTTP

Recommendations