2015-08-30 100 views
1

連接客戶端後,訂閱包含所有連接的用戶特定的房間:手柄斷開/註銷事件

io.socket.get('/connection/subscribe', function(data, jwr) { 
    io.socket.on('user_connected', function(user) { console.log('new bro connected'); }); 
}); 

此刻我只是在存儲器中存儲的用戶ID。爲此我使用一個變量,

var connectionIDs = []; 

/*...*/ 
subscribe: function(req, res) { 
    if(typeof req.user !== 'undefined') { 
     sails.sockets.join(req.socket, 'users_online'); 

     User.find(req.user.id).exec(function(err, user) { 
      if(connectionIDs.indexOf(user[0].id) == -1) { 
       connectionIDs.push(user[0].id); 
      } 
      sails.sockets.broadcast('users_online', 'user_connected', user); 
     }); 

     return res.ok(); 
    } 
}, 

一切正常,到目前爲止,我唯一的問題是處理斷開或註銷事件。關閉窗口後,退出或類似的,我需要從users_online房間unsubsribe。

已經嘗試過

io.socket.on('disconnect', function() { io.socket.post('/disconnect', function() { })); 

但不幸的要求永遠不會發送。如何正確處理斷開事件?

回答

1

可能這個例子可以幫助你: http://socket.io/docs/#sending-and-receiving-events

斷開將從.on('connection')內發射。因此,您可以檢測項目的服務器端和客戶端的斷開連接。

+0

使用這種方法最大的問題(或者在我的情況下sails'afterDisconnect'方法)是即使在刷新頁面後也會觸發它。理論上每個刷新都是斷開/連接...有沒有辦法解決這個問題? – nehalist

+0

建議朋友使用握手cookie,但我沒有與他們密切合作 –