Lesson 48 — WebSocket & Streaming (Visualization)
Ba module tương tác: (1) so sánh dòng message của Long polling / SSE / WebSocket;
(2) handshake nâng cấp HTTP → WS từng bước; (3) chat broadcast nhiều client
qua hub. Mở README (nút 📖 góc phải) để đọc lý thuyết đầy đủ.
1. So sánh dòng message — Long polling / SSE / WebSocket
Long polling
Mỗi event = 1 HTTP request mớiClientServer
SSE
1 connection giữ mãi, server đẩy 1 chiềuClientServer
WebSocket
Full-duplex, hai chiều đồng thờiClientServer
Quan sát: Long polling tốn 1 request setup + headers cho mỗi event (gói xanh dương đi
lên trước mỗi gói xanh lá). SSE chỉ 1 request đầu, sau đó server đẩy thẳng. WebSocket
cả 2 chiều cùng bay — client gửi typing indicator trong khi server đẩy message.
2. WebSocket handshake — nâng cấp HTTP → WS
Trạng thái: chế độ HTTP request/response
① Client gửi HTTP request kèm header UpgradeGET /ws HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
② Server tính Accept = base64(SHA1(key + GUID))key = dGhlIHNhbXBsZSBub25jZQ==
GUID = 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
→ Sec-WebSocket-Accept = s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
③ Server trả 101 Switching ProtocolsHTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
④ Bỏ HTTP — chuyển sang frame protocol full-duplexFIN | opcode=0x1 (text) | MASK | len | payload...
opcode: 0x1 text · 0x2 binary · 0x8 close · 0x9 ping · 0xA pong
💡 Giống đi qua cửa kiểm an sân bay: dùng giấy tờ HTTP để vào (bước ①–③). Sau status
101 bạn ở khu miễn thuế — di chuyển tự do bằng frame, không show
giấy tờ HTTP nữa (bước ④).
3. Chat broadcast — hub-and-spoke nhiều client
Hub
sở hữu map
register · unregister
broadcast
register · unregister
broadcast
Chỉ goroutine Hub đụng vào map clients → không cần mutex. Khi 1 client gửi, message đi
vào
broadcast channel; Hub phát vào send
channel (buffered) của từng client. Nếu buffer client đầy (client chậm) → Hub
drop client đó thay vì block cả hệ thống. Bấm 🐌 để xem Carol bị drop.