.join()
將 socket 訂閱到一個 room。
sails.sockets.join(socket, roomName);
或
sails.sockets.join(socket, roomName, cb);
參數 | 類型 | 詳細資訊 | |
---|---|---|---|
1 | socket | 要訂閱的 socket。 可以透過 socket 的 ID 或傳入的 socket 請求 (req ) 指定。 |
|
2 | roomName | socket 將訂閱到此 room 的名稱。如果該 room 尚不存在,將會被建立。 | |
3 | _cb_ | 一個選用的回呼函式 (callback),當目前伺服器上的操作完成時(詳情請參閱下方註解),或發生嚴重錯誤時,將會被呼叫。若發生錯誤,它將會以單一參數 (err ) 呼叫。 |
在控制器動作中
subscribeToFunRoom: function(req, res) {
if (!req.isSocket) {
return res.badRequest();
}
var roomName = req.param('roomName');
sails.sockets.join(req, roomName, function(err) {
if (err) {
return res.serverError(err);
}
return res.json({
message: 'Subscribed to a fun room called '+roomName+'!'
});
});
}
sails.sockets.join()
的功能或多或少等同於 Socket.IO 中的.join()
,但額外內建支援多伺服器部署。在建議的生產環境設定下,無論程式碼碰巧在哪個伺服器上執行,或目標 socket 連接到哪個伺服器,sails.sockets.join()
都能如文件所述般運作。- 在多伺服器環境中,當使用 socket ID 參數呼叫
.join()
時,回呼函式 (cb
) 將在.join()
呼叫在目前伺服器上完成時執行。這不保證叢集中的其他伺服器已完成執行該操作。- 每個 socket 都會自動訂閱到一個以其 ID 作為名稱的 room,允許透過
sails.sockets.broadcast()
直接傳訊息給 socket。- 在將
req
作為目標 socket 傳入之前,請務必檢查req.isSocket === true
。為了使其運作,提供的req
必須來自 socket 請求,而不僅僅是任何舊的 HTTP 請求。