.leave()
取消 socket 訂閱房間。
sails.sockets.leave(socket, roomName);
或
sails.sockets.leave(socket, roomName, cb);
參數 | 類型 | 詳細資訊 | |
---|---|---|---|
1 | socket | 要取消訂閱的 socket。可以是傳入的 socket 請求 (req) 或另一個 socket 的 ID。 | |
2 | roomName | socket 將取消訂閱的房間名稱。 | |
3 | _cb_ | 一個可選的回調函數,當目前伺服器上的操作完成時(詳情請參閱以下註釋),或遇到致命錯誤時,將會調用此函數。在發生錯誤的情況下,它將以單個參數 (err ) 調用。 |
在控制器動作中,取消請求 socket 訂閱指定的房間
leaveFunRoom: function(req, res) {
if ( _.isUndefined(req.param('roomName')) ) {
return res.badRequest('`roomName` is required.');
}
if (!req.isSocket) {
return res.badRequest('This endpoints only supports socket requests.');
}
var roomName = req.param('roomName');
sails.sockets.leave(req, roomName, function(err) {
if (err) {return res.serverError(err);}
return res.json({
message: 'Left a fun room called '+roomName+'!'
});
});
}
sails.sockets.leave()
用法的更多範例在此處提供,包括通過 ID 取消訂閱其他 socket、與資料庫更深入的整合、在服務中的使用以及與 async
庫的使用。
sails.sockets.leave()
在功能上或多或少等同於 Socket.IO 中的.leave()
功能,但額外內建了對多伺服器部署的支援。使用建議的生產設定,無論程式碼碰巧在哪個伺服器上執行,或目標 socket 連接到哪個伺服器,sails.sockets.leave()
都能按文件所述運作。- 在多伺服器環境中,當使用 socket ID 參數調用
.leave()
時,回調函數 (cb
) 將在.leave()
調用在當前伺服器上完成時執行。這不保證叢集中的其他伺服器已完成執行操作。- 在將
req
作為要取消訂閱的 socket 傳入之前,請務必檢查req.isSocket === true
。為了使其正常工作,提供的req
必須來自 socket 請求,而不僅僅是任何舊的 HTTP 請求。