Lập trình 22/09/2026 8 phút

Bắt tay WebSocket đọc từng byte: 155 byte đi, 129 byte về, Sec-WebSocket-Accept tự tính bằng SHA-1 khớp đúng ví dụ của RFC, bắt tay mất 80 µs ngang một GET mở kết nối mới nhưng gấp 8 lần GET keep-alive, và bốn cách bắt tay hỏng kèm mã lỗi thật

Một client Go viết tay từng dòng header bắt tay WebSocket và in nguyên văn phản hồi: 155 byte đi, 129 byte về sau 333 µs, Accept là base64 của SHA-1 key nối GUID, khớp đúng ví dụ RFC 6455. Đo 2.000 lần: dial WebSocket mất 80 µs p50, GET mở kết nối mới 94 µs, GET keep-alive 10 µs. Sau bắt tay, một thông điệp 10 byte tốn 16 byte đi và 12 byte về so với 99 byte header tối thiểu của một GET. Bốn cách hỏng đo thật: thiếu Upgrade 400, version 12 cũng 400 thay vì 426, Origin lạ 403, proxy bỏ header Upgrade gây bad handshake trong khi ReverseProxy của Go cho 101.