2013-04-30 34 views
10

Tôi có ứng dụng trò chuyện trên Node.js và Socket.io, người dùng có thể kết nối và ngắt kết nối bằng ... Tôi có danh sách người dùng trực tuyến được quản lý hoàn hảo với sự trợ giúp của các sự kiện được xác định mà người dùng của tôi kích hoạt.

Nhưng vấn đề là tôi không thể phát hiện nếu người dùng đã bị mất kết nối của mình hoặc đóng cửa sổ trình duyệt mà không ngắt kết nối mình bằng tay (bằng nút ngắt kết nối) ...cách phát hiện kết nối của người dùng bị mất hoặc đóng cửa sổ trình duyệt trong Nodejs socket.io

kiện socket.io này là bắn chỉ khi người dùng tự ngắt kết nối khi không bị mất kết nối.

socket.on('disconnect',function(){ 
    console.log('user disconnected'); }); 

Tôi muốn có một số cơ chế thực sự tốt để theo dõi người dùng để cập nhật danh sách người dùng Trực tuyến của mình.

Trả lời

15

Và sự khác biệt là gì? Đóng cửa sổ, cắt dây ethernet ... tất cả đều giống nhau đối với máy chủ: kết thúc kết nối.

Đọc các tài liệu socket.io: https://github.com/LearnBoost/socket.io/wiki/Exposed-events

socket.on ('ngắt kết nối', function() {}) - trường hợp ngắt kết nối là bắn trong mọi trường hợp, khi kết nối client-server bị đóng . Nó kích hoạt trên các kết nối không mong muốn, không mong muốn, di động, unmobile, máy khách và máy chủ.

Bạn không nên dựa vào nút của mình vì mọi người có thể ngắt kết nối mà không cần sử dụng nút đó. Sử dụng sự kiện ngắt kết nối và khi ổ cắm ngắt kết nối (ổ cắm, không phải người dùng, gây ra Node chỉ biết về ổ cắm), bạn sẽ phải tìm ra "chủ sở hữu" của socket đó và gắn cờ anh ta là "bị ngắt kết nối". Hoặc thậm chí tốt hơn, chờ một vài giây và sau đó gắn cờ anh ta là ngoại tuyến. Tại sao? Vì sự kiện ngắt kết nối sẽ kích hoạt ngay cả khi người dùng chỉ tải lại trang hoặc điều hướng đến một trang khác. Vì vậy, nếu bạn chờ một vài giây, người dùng sẽ trực tuyến lại.

Tôi cũng gặp vấn đề này và tôi đã tạo một "người theo dõi" chạy mỗi X giây và gắn cờ người dùng là ngoại tuyến khi họ không sở hữu bất kỳ ổ cắm nào hoặc khi họ vắng mặt (không hoạt động lâu dài) thời gian).

+1

Được rồi ... tôi hiểu rồi, sự kiện 'ngắt kết nối' hoạt động nhưng sau 10-15 giây nên lúc đầu tôi nghĩ rằng nó sẽ không bao giờ xảy ra ... xấu của tôi. –

+0

làm thế nào để có được session.id người dùng bị ngắt kết nối ..? –

+2

Nhận phiên người dùng bị ngắt kết nối.id giải thích http://stackoverflow.com/questions/8286683/socket-id-of-disconnecting-client?answertab=active#tab-top –

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