我们说我有一个带有10行的表格的角度页面,每行都有一个id,并将我重定向到一个具有唯一ID的页面。
我想在socket.io中订阅此id,当我将此页面/更改为另一个时,我想将之前的订阅替换为新订阅。
我该怎么做?我是否必须将所有当前订阅保存在数据库中?
(我在节点上使用sails.js框架,在客户端使用angular)。
答案 0 :(得分:0)
当您断开套接字(即将页面更改为另一个)时,socket.io会自动取消您的套接字。
要订阅房间,您只需在连接ID时从角度发送消息,然后在您的sails控制器中为用户订阅ID
修改强>
如this页所述,您需要实施系统来跟踪套接字。
首先,在/ api / services /中创建一个服务并将其放入:
module.exports = {
switchRoom: function (socket, to_id) {
var tmp = _.find(sails.mysubscribers, function (sub) {
return sub.socket === socket;
});
if (tmp) { // If user came from another page unsuscribe him
sails.sockets.leave(socket, 'Unique prefix' + tmp.roomId);
} else {
tmp = {
socket: socket
};
sails.mysubscribers.push(tmp);
}
if (!to_id) { // If the user leave remove him from the array
var index = sails.mysubscribers.indexOf(tmp);
if (index > -1) sails.mysubscribers.splice(index, 1);
} else {
tmp.roomId = to_id;
sails.sockets.join(socket, 'Unique prefix' + to_id);
}
}
};
然后,在/config/sockets.js中编辑afterDisconnect函数:
module.exports.sockets = {
afterDisconnect: function (session, socket, cb) {
YourService.switchRoom(socket);
return cb();
}
};
现在,当你需要switchRoom时,你只需要调用YourService.switchRoom(req.socket, roomId)
,其中roomId是由angular发送的id ...
那就是它!