Bibliotecas WebSocket para Node.js: ws, Socket.IO e uWebSockets.js

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

Bibliotecas WebSocket para Node.js: do chat simples a sistemas de tempo real de alta carga



WebSocket é um protocolo que fornece uma conexão bidirecional permanente entre cliente e servidor. Diferentemente do HTTP, onde a requisição-resposta é iniciada pelo cliente, o WebSocket permite que o servidor envie dados a qualquer momento. Para o Node.js, conhecido por sua assincronicidade e arquitetura orientada a eventos, o WebSocket tornou-se uma escolha natural para criar chats, jogos online, terminais de negociação e transmissão de dados em fluxo.



Neste artigo, analisaremos três bibliotecas principais: ws (leve e rápida), Socket.IO (conveniente com mecanismos de fallback) e uWebSockets.js (desempenho recorde). Você aprenderá qual escolher para sua tarefa e como escrever um chat simples com cada uma delas.



1. Biblioteca ws — minimalismo e velocidade



ws é a biblioteca WebSocket mais popular para Node.js. Ela implementa o protocolo puro RFC 6455 sem camadas extras. Principais vantagens:

  • Desempenho máximo — até 200.000+ mensagens/seg em um único núcleo.
  • Zero dependências — apenas JavaScript puro.
  • Controle total sobre a conexão: handshake, frames, ping/pong.
  • Suporte a Node.js Buffer e Streams para dados binários.


Desvantagens: sem reconexão automática, sem salas (rooms), sem fallback para HTTP long-polling. Tudo precisa ser implementado manualmente ou através de pacotes adicionais.



Exemplo: servidor echo simples com ws



const WebSocket = require('ws');

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

server.on('connection', (ws) => { console.log('Cliente conectado');

ws.on('message', (message) => { console.log('Recebido:', message.toString()); // Envia de volta (echo) ws.send(`Echo: ${message}`); });

ws.on('close', () => { console.log('Cliente desconectado'); });

// Envia saudação ao conectar ws.send('Bem-vindo ao servidor WebSocket!');});

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


Quando escolher ws? — para microsserviços, jogos de alta carga (onde cada quadro é importante), para incorporação em seu próprio servidor HTTP (via server.on('upgrade')).



2. Socket.IO — conveniência e confiabilidade para produção



Socket.IO não é apenas WebSocket, mas uma plataforma de tempo real completa. Ela usa WebSocket como transporte principal, mas muda automaticamente para HTTP long-polling se o WebSocket não for suportado (proxies, firewalls, navegadores antigos).



  • Salas (Rooms) — agrupamento de clientes para transmissões broadcast.
  • Namespaces — divisão lógica da aplicação (ex.: /chat e /game).
  • Reconexão automática com backoff exponencial.
  • Suporte a eventos — você trabalha com eventos, não com mensagens brutas.
  • Serialização integrada — envio de objetos JSON sem parsing manual.


Desvantagens: overhead de protocolo (pacotes extras com metadados), mais dependências, um pouco mais lento que ws puro.



Exemplo: chat com salas no Socket.IO (servidor)



const http = require('http');const { Server } = require('socket.io');

const server = http.createServer();const io = new Server(server, { cors: { origin: '*' } // para desenvolvimento});

io.on('connection', (socket) => { console.log('Novo cliente:', socket.id);

// Entrar em uma sala socket.on('join_room', (roomName) => { socket.join(roomName); socket.emit('message', `Você entrou na sala ${roomName}`); socket.to(roomName).emit('message', `Usuário ${socket.id} entrou na sala`); });

// Enviar mensagem para a sa

Recommendations