.broadcast()
廣播訊息到房間內的所有 sockets (或是特定的 socket)。
sails.sockets.broadcast(roomNames, data);
或
sails.sockets.broadcast(roomNames, eventName, data);
sails.sockets.broadcast(roomNames, data, socketToOmit);
sails.sockets.broadcast(roomNames, eventName, data, socketToOmit);
參數 | 類型 | 詳細資訊 | |
---|---|---|---|
1 | roomNames | 要廣播訊息的一個或多個房間名稱 (請參閱 sails.sockets.join)。若要廣播到個別的 sockets,請使用其 ID 作為房間名稱。 | |
2 | eventName | 選填。用戶端用來識別此訊息的事件唯一名稱。預設為 'message' 。 |
|
3 | data | 要在訊息中傳送的資料。 | |
4 | socketToOmit | 選填。如果提供此參數,則屬於指定 socket 請求的 socket 將不會收到訊息。當您從用戶端觸發廣播,但不希望該用戶端本身收到訊息時 (例如,傳送訊息給聊天室中的其他人),這非常有用。 |
在伺服器上的 action、service 或任意 script 中
sails.sockets.broadcast('artsAndEntertainment', { greeting: 'Hola!' });
在用戶端
io.socket.on('message', function (data){
console.log(data.greeting);
});
關於 sails.sockets.brodcast()
用法的更多範例在此處提供,包括廣播到多個房間、使用自訂事件名稱,以及省略請求的 socket。
sails.sockets.broadcast()
的功能或多或少等同於 Socket.IO 中.emit()
和.broadcast()
的功能。- 每個 socket 都會自動訂閱一個以其 ID 為名稱的房間,允許透過
sails.sockets.broadcast()
直接傳訊到 socket- 在將
req
作為socketToOmit
傳入之前,請務必檢查req.isSocket === true
。若要省略請求的 socket,請求 (req
) 必須來自 socket 請求,而不僅僅是任何舊的 HTTP 請求。data
必須是可序列化為 JSON 的;也就是說,最好使用純字典/陣列,並確保您的資料不包含任何循環參照。如果您不確定,請手動建立您的廣播data
,或先對其呼叫類似rttc.dehydrate(data,true,true)
的方法。