Nhịp tim WebSocket trong trình duyệt cần một giao thức ứng dụng
Thiết kế một nhịp tim ứng dụng đã thống nhất khi JavaScript của trình duyệt không thể gửi trực tiếp khung WebSocket Ping.
API WebSocket của trình duyệt có send(). Nó không cung cấp một phương thức ping() tổng quát để JavaScript gửi khung Ping của giao thức.
Nếu ứng dụng của bạn gửi một tin nhắn văn bản như {"type":"heartbeat"}, đó là dữ liệu ứng dụng. Máy chủ phải hiểu tin nhắn và định nghĩa một phản hồi. Một máy chủ không triển khai hợp đồng đó không bắt buộc phải trả lời bằng Pong của giao thức chỉ vì văn bản có chứa từ ping.
Hãy định nghĩa xác nhận nghĩa là gì, nó nhận diện nhịp tim đang chờ ra sao và khi nào một xác nhận cũ là quá muộn. Giữ điều này tách biệt với xác nhận của một nghiệp vụ kinh doanh.
Bộ hẹn giờ JavaScript cũng có những ràng buộc về lập lịch. Các tab nền và luồng chính bận rộn có thể làm chậm các lệnh gọi lại. Đừng diễn giải một mốc hẹn giờ chính xác bị lỡ là bằng chứng quyết định rằng proxy đã ngừng chuyển tiếp.
Trình duyệt có thể xử lý nội bộ các khung điều khiển của giao thức, nhưng điều đó không cho mã ứng dụng một cái nhìn khả chuyển về mọi Ping hoặc Pong. Nếu trang cần quyết định sự sống của riêng mình, hãy dùng một hợp đồng ứng dụng rõ ràng và chính sách phục hồi.
Một socket có readyState là OPEN được coi là mở tại chỗ; đó không phải là phép đo độc lập cho thấy ứng dụng ở xa đã xử lý tin nhắn cuối cùng của bạn. Hãy dùng bằng chứng phù hợp với câu hỏi mà bạn thực sự cần trả lời.