Bibliotecas WebSocket para Node.js: ws, Socket.IO, uWS — visão geral completa

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: 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 ws


Exemplo: 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.io


Exemplo: 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:

Recommendations