【问题标题】:Handle disconnect / logout events处理断开/注销事件
【发布时间】:2015-11-24 22:17:45
【问题描述】:

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

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 房间取消订阅。

已经试过了

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

但遗憾的是,该请求从未发送过。如何正确处理断开事件?

【问题讨论】:

    标签: node.js sockets sails.js


    【解决方案1】:

    也许这个例子可以帮助你: http://socket.io/docs/#sending-and-receiving-events

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

    【讨论】:

    • 使用这种方法(或者在我的情况下是sailsafterDisconnect方法)最大的问题是即使在刷新页面后也会触发它。从理论上讲,每次刷新都是断开/连接...有没有办法解决这个问题?
    • 建议朋友使用握手cookie,但我没有与他们密切合作
    猜你喜欢
    • 2013-06-21
    • 2011-03-26
    • 2010-09-22
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多