2012-02-07 36 views
9

Tôi cần có khả năng phát hiện khi người dùng mất kết nối với ổ cắm, có vẻ như socket.on("disconnect") đang được gọi khi tôi đóng máy tính xách tay của mình, vì vậy nó không chạy cuộc gọi ajax cần chạy để cập nhật cơ sở dữ liệu để đánh dấu người dùng là ngoại tuyến. Làm cách nào tôi có thể kiểm tra xem kết nối đã bị đóng hay chưa?Ổ cắm IO phát hiện khi máy khách bị mất kết nối

+0

tôi sẽ đề nghị có một người biết lắng nghe, hoặc một 'nhịp tim' để kiểm tra các khách hàng cho một phản hồi từ máy chủ. Đó là những gì tôi làm. –

+1

Tôi đã làm điều này trong phiên bản trước của trang web của mình, mặc dù đã cung cấp đủ người dùng vào một thời điểm nhất định có vẻ như nó có thể là quá tải trên máy chủ, tùy theo số lượng yêu cầu, mặc dù nó có thể là tốt nhất, và chỉ có tùy chọn. –

+0

socket.io sử dụng nhịp tim, vì vậy tôi chắc chắn điều này có thể thực hiện được – EhevuTov

Trả lời

2

chúng tôi đã xem xét điều này quá và như đã đề cập ở trên sử dụng bộ đếm nhịp tim của riêng chúng tôi.

Ví dụ: máy chủ sẽ phát ra nhịp tim sau mỗi 5 giây (chúng tôi đơn giản gửi thời gian máy chủ). Khách hàng có thời gian chờ 11 giây nên có 2 cơ hội để nắm bắt nhịp tim. Nếu nó nhận được nhịp tim, chúng tôi sẽ đặt lại bộ hẹn giờ. Nếu chúng ta bỏ lỡ cả hai nhịp tim, chức năng timeout sẽ chạy và bạn làm bất cứ điều gì bạn muốn ở đó.

Khá đơn giản.

3

Như đã đề cập ở đây https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO, Socket.IO có cài đặt nhịp tim riêng. Nhưng mặc định là khoảng thời gian 25 giây và ngưỡng 60 cho kết nối bị mất.

Vì vậy, lời khuyên của tôi: Đặt các giá trị mặc định như bạn mong đợi khi thử nghiệm. Nếu không, bạn có thể bỏ lỡ ngưỡng.

Ví dụ:

socket.set("heartbeat timeout", 10); 
socket.set("heartbeat interval", 5); 
+0

Đây phải là câu trả lời được chấp nhận. Nó hoạt động trên lần đầu tiên ... Trong trường hợp của tôi thời gian chờ và khoảng thời gian được thiết lập trong mili giây nên 10000 thay vì 10 ... Cảm ơn hoàn hảo! –

Các vấn đề liên quan