【发布时间】: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() { }));
但遗憾的是,该请求从未发送过。如何正确处理断开事件?
【问题讨论】: