Node.js 处理断开/注销事件

Node.js 处理断开/注销事件,node.js,sockets,sails.js,Node.js,Sockets,Sails.js,连接客户端后,订阅包含所有连接用户的特定房间: io.socket.get('/connection/subscribe', function(data, jwr) { io.socket.on('user_connected', function(user) { console.log('new bro connected'); }); }); 目前,我只是将用户ID存储在内存中。因此我使用一个变量 var connectionIDs = []; /*...*/ subscribe:

连接客户端后,订阅包含所有连接用户的特定房间:

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\u online
房间取消订阅

已经试过了

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

但遗憾的是,请求从未发出。如何正确处理断开连接事件?

此示例可能会帮助您:


断开连接将从('connection')的内部触发。因此,您可以在项目的服务器端和客户端检测到断开连接。

使用此方法(或者在我的案例中,sails
afterDisconnect
方法)的最大问题是,即使在刷新页面后也会触发断开连接。理论上,每次刷新都是断开/连接。。。有没有办法解决这个问题?建议朋友们使用握手饼干,但我还没有和他们密切合作