Bibliotecas WebSocket para Node.js: ws, Socket.IO e µWebSockets
WebSocket é um protocolo que fornece uma conexão bidirecional persistente entre cliente e servidor. No ecossistema Node.js, existem várias bibliotecas populares que implementam este protocolo. Neste artigo, veremos três principais: ws, Socket.IO e µWebSockets (uWS). Você aprenderá como instalá-las, escrever um simples servidor de chat e escolher a ferramenta adequada para sua tarefa.
1. Biblioteca ws — leve e de alto desempenho
ws é a biblioteca WebSocket mais popular e rápida para Node.js. Ela implementa o protocolo WebSocket puro sem complementos adicionais, o que proporciona sobrecarga mínima e velocidade máxima.
Instalação
npm install wsExemplo: servidor eco
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}`); ws.send(`Eco: ${message}`); });
ws.on('close', () => { console.log('Cliente desconectado'); });});
console.log('Servidor WebSocket iniciado em ws://localhost:8080');Parte do cliente (navegador)
const socket = new WebSocket('ws://localhost:8080');
socket.onopen = () => { console.log('Conexão estabelecida'); socket.send('Olá, servidor!');};
socket.onmessage = (event) => { console.log('Resposta do servidor:', event.data);};
socket.onerror = (error) => { console.error('Erro WebSocket:', error);};Características do ws:
- Desempenho: até 2-3 vezes mais rápido que Socket.IO em testes de throughput.
- Minimalismo: sem mecanismos embutidos de reconexão, salas ou transportes de fallback.
- Suporte: compatibilidade total com RFC 6455.
- Uso: ideal para aplicações em tempo real onde a velocidade é crítica (dados de bolsa, jogos, chats de alta carga).
2. Socket.IO — conveniência e confiabilidade para produção
Socket.IO não é apenas uma biblioteca WebSocket, mas sim um framework completo para aplicações em tempo real. Ele adiciona sobre o WebSocket: reconexão automática, salas, namespaces, fallback para long-polling (se WebSocket não for suportado) e uma API conveniente.
Instalação
npm install socket.ioExemplo: servidor de chat simples
const http = require('http');const { Server } = require('socket.io');
const server = http.createServer();const io = new Server(server, { cors: { origin: '*' }});
io.on('connection', (socket) => { console.log(`Usuário conectado: ${socket.id}`);
socket.on('chat message', (msg) => { console.log(`Mensagem: ${msg}`); io.emit('chat message', msg); // envia para todos });
socket.on('disconnect', () => { console.log(`Usuário desconectado: ${socket.id}`); });});
server.listen(3000, () => { console.log('Servidor Socket.IO em http://localhost:3000');});Parte do cliente (navegador)
<script src="/socket.io/socket.io.js"></script><script> const socket = io('http://localhost:3000');
socket.on('connect', () => { console.log('Conectado ao servidor'); socket.emit('chat message', 'Olá a todos!'); });
socket.on('chat message', (msg) => { const item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); });</script>Características do Socket.IO:
- Reconexão automática: em caso de queda de conexão, o cliente tenta restabelecer a comunicação automaticamente.
Também na biblioteca
Recommendations