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
WebSocket
Conexão persistente aberta
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