2011-12-17 41 views
7

Tôi có một trang mà người dùng kết nối với máy chủ nút của tôi với socket.io nhưng tôi chỉ cho phép họ có một kết nối socket.io mở tới máy chủ (bằng cách chuyển theo id tài khoản của họ khi ủy quyền và lưu trữ nó trong một mảng) và điều này hoạt động tốt 99% thời gian. Vấn đề là đôi khi khi người dùng ngắt kết nối, sự kiện ngắt kết nối với máy chủ không kích hoạt vì một lý do nào đó, vì vậy tôi không thể xóa tài khoản của họ khỏi mảng khách hàng, điều này kết thúc với việc họ bị khóa.Làm cách nào để kiểm tra xem ổ cắm có được kết nối không?

Có cách nào để tôi kiểm tra xem kết nối ổ cắm cũ của họ (mà tôi có ID của) vẫn hoạt động không? (Vì vậy, nếu nó không phải là tôi có thể xóa kết nối cũ của họ và để cho họ kết nối lại)

+0

bạn có tìm thấy giải pháp cho Matt này không? – SatheeshJM

Trả lời

4

Đảm bảo rằng nhịp tim được đặt thành true (mặc định). Nếu hết thời gian chờ, ngắt kết nối sẽ tự động xảy ra. Tuy nhiên, có một báo cáo lỗi về nhịp tim không hoạt động. Đảm bảo bạn có phiên bản mới nhất của Socket.IO (Tôi không chắc chắn trạng thái của lỗi).

Nếu bạn vẫn cần sự giúp đỡ, bạn có thể gửi một ping để kết nối cũ khi người dùng cố gắng kết nối lại:

Phát ra một 'ping' từ máy chủ, và trả lời với 'pong' từ khách hàng nếu kết nối vẫn còn sống. Nếu ping hết giờ (sau khi nói, 20 giây), hãy ngắt kết nối theo cách thủ công để người dùng có thể kết nối lại. Bạn có thể sử dụng lệnh ping để thông báo cho máy khách gốc rằng một ứng dụng khách khác đang cố gắng kết nối và nâng cao một số giao diện người dùng cho hiệu ứng đó.

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