</>
⌕
Mid #websocket#sse#realtime#polling

WebSocket, Server-Sent Events và long polling: khác nhau và chọn thế nào?

⚡ Trả lời nhanh

WebSocket là kênh song công (hai chiều) trên một kết nối TCP sau bước upgrade, hợp chat/game. SSE là luồng một chiều server tới client trên HTTP, tự reconnect, đủ cho notification/feed. Long polling là fallback đơn giản nhưng tốn tài nguyên hơn.

WebSocketSSELong polling
HướngHai chiềuServer tới clientMô phỏng
Giao thứcws://, wss://HTTP (text/event-stream)HTTP
Tự reconnectPhải tự codeCó sẵn (EventSource)Tự code
Dữ liệuText và binaryChỉ textBất kỳ
Proxy/firewallĐôi khi gặp vấn đềThân thiệnThân thiện
const ws = new WebSocket("wss://example.com/chat");
ws.onmessage = (e) => console.log(e.data);
ws.send("hello");

const es = new EventSource("/events");
es.onmessage = (e) => console.log(e.data);
  • WebSocket bắt đầu bằng HTTP request Upgrade: websocket rồi chuyển giao thức.
  • Với WebSocket cần xử lý heartbeat (ping/pong), reconnect với backoff, scale ngang (sticky session hoặc pub/sub như Redis).
  • SSE trên HTTP/1.1 bị giới hạn ~6 kết nối mỗi domain; HTTP/2 hết hạn chế này.
🃏 Ôn bằng flashcard