AULA 64
MÓDULO 9
tópicos avançados
⏱ 55 min
WebSockets
WebSockets vs polling. Socket.IO: rooms, namespaces, autenticação. Chat em tempo real.
WebSocketSocket.IOroomstempo realpollingbidirecional
WebSockets — comunicação bidirecional
WebSocket é um protocolo que estabelece uma conexão persistente bidirecional entre cliente e servidor. Em vez de o cliente fazer polling constante, o servidor empurra dados em tempo real.
HTTP Polling
Cliente pergunta a cada 5s
Maioria das respostas: "nada novo"
Latência: até 5000ms
Alto overhead
Maioria das respostas: "nada novo"
Latência: até 5000ms
Alto overhead
WebSocket
Conexão persistente aberta
Servidor empurra quando há novidade
Latência: <50ms
Baixo overhead após handshake
Servidor empurra quando há novidade
Latência: <50ms
Baixo overhead após handshake
casos de uso
Chat em tempo real, notificações push, colaboração (Google Docs), dashboards live, jogos multiplayer, feeds de trading financeiro.Socket.IO
Socket.IO adiciona abstração sobre WebSocket com: reconexão automática, namespaces, salas (rooms) e fallback para HTTP long-polling quando WebSocket não está disponível.
Socket.IO vs WebSocket nativo
ws é mais leve e performático. Socket.IO tem mais features. Para a maioria dos casos, Socket.IO é a escolha prática. Para máxima performance (jogos, trading), use ws nativo.
javascript
// Socket.IO — chat em tempo real // server.js const express = require('express') const { createServer } = require('node:http') const { Server } = require('socket.io') const app = express() const httpServer = createServer(app) const io = new Server(httpServer, { cors: { origin: process.env.CLIENT_URL } }) // Autenticar conexão WebSocket io.use((socket, next) => { const token = socket.handshake.auth.token try { socket.user = jwt.verify(token, process.env.JWT_SECRET) next() } catch { next(new Error('Unauthorized')) } }) io.on('connection', (socket) => { const { userId, name } = socket.user socket.join(`user:${userId}`) // sala pessoal socket.on('chat:send', ({ roomId, text }) => { const msg = { userId, name, text, at: new Date() } io.to(roomId).emit('chat:message', msg) db.messages.save(msg) }) socket.on('disconnect', () => { console.log('Desconectado:', userId) }) })
quiz · aula 64
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Por que WebSocket é melhor que polling para chat em tempo real?
QUESTÃO 02
O que são 'rooms' no Socket.IO?
QUESTÃO 03
Por que o Socket.IO tem fallback para long-polling?
0/3