0
比方說,我有一個帶有10行的表格,每行都有一個ID,並將我重定向到具有唯一ID的頁面。取消訂閱socket.io中的訂閱
我想在socket.io中訂閱此ID,當我將此頁/更改爲另一個時,我想將以前的訂閱替換爲新訂閱。
我該怎麼做?我是否必須將所有當前訂閱保存在數據庫中?
(我在節點上使用sails.js框架,在客戶端使用角度)。
比方說,我有一個帶有10行的表格,每行都有一個ID,並將我重定向到具有唯一ID的頁面。取消訂閱socket.io中的訂閱
我想在socket.io中訂閱此ID,當我將此頁/更改爲另一個時,我想將以前的訂閱替換爲新訂閱。
我該怎麼做?我是否必須將所有當前訂閱保存在數據庫中?
(我在節點上使用sails.js框架,在客戶端使用角度)。
當您斷開一個套接字(即將頁面更改爲另一個套接字)時,socket.io將自動刪除您的套接字。
要訂閱一個房間,你可以簡單地當你的ID連接,然後在你的船帆控制器您訂閱用戶的ID
編輯
像this發送從角消息頁面說,你需要實現你的系統來跟蹤套接字。
首先,創建/ API /服務的服務/放認爲:
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();
}
};
現在,當您需要切換房間,您只需撥打YourService.switchRoom(req.socket, roomId)
,其中roomId是通過角度發送的身份證...
就是這樣!
但我使用角度,所以沒有真正的頁面更改斷開連接。 – user3712353
我用這種方式編輯答案;) –