2016-04-27 267 views
0

比方說,我有一個帶有10行的表格,每行都有一個ID,並將我重定向到具有唯一ID的頁面。取消訂閱socket.io中的訂閱

我想在socket.io中訂閱此ID,當我將此頁/更改爲另一個時,我想將以前的訂閱替換爲新訂閱。

我該怎麼做?我是否必須將所有當前訂閱保存在數據庫中?

(我在節點上使用sails.js框架,在客戶端使用角度)。

回答

0

當您斷開一個套接字(即將頁面更改爲另一個套接字)時,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是通過角度發送的身份證...

就是這樣!

+0

但我使用角度,所以沒有真正的頁面更改斷開連接。 – user3712353

+0

我用這種方式編輯答案;) –