我假設這是不可能的,但是想問一下。如果我想提供狀態信息網頁,我想使用WebSockets將數據從服務器推送到瀏覽器。但我擔心的是大量瀏覽器對服務器的影響。我可以向所有客戶端廣播,而不是向每個客戶端發送離散消息嗎?我可以向所有的WebSocket客戶端廣播
回答
WebSockets使用TCP,它是點對點的,並且不提供廣播支持。
是的,你可以和許多套接字服務器在那裏寫在各種腳本語言,這樣做。
該鏈接不起作用 – 2013-06-21 01:43:11
@ArchimedesTrajano修復了斷開的鏈接。 – 2013-06-21 11:43:51
Microsoft.Web.WebSockets命名空間具有帶廣播功能的WebSocketCollection。在Nuget中查找程序集。該名稱是Microsoft.WebSockets。
是的,可以向多個客戶端廣播消息。
在Java中,
@OnMessage
public void onMessage(String m, Session s) throws IOException {
for (Session session : s.getOpenSessions()) {
session.getBasicRemote().sendText(m);
}
}
,並在這裏進行解釋。 https://blogs.oracle.com/PavelBucek/entry/optimized_websocket_broadcast。
不知道你的客戶端/服務器設置如何,但你總是可以在服務器中保存所有連接客戶端的集合 - 然後迭代每個客戶端併發送消息。使用節點的WebSocket的圖書館
一個簡單的例子:
Server代碼
var WebSocketServer = require('websocket').server;
var clients = [];
var socket = new WebSocketServer({
httpServer: server,
autoAcceptConnections: false
});
socket.on('request', function(request) {
var connection = request.accept('any-protocol', request.origin);
clients.push(connection);
connection.on('message', function(message) {
//broadcast the message to all the clients
clients.forEach(function(client) {
client.send(message.utf8Data);
});
});
});
由於send只是套接字緩衝區的本地副本,所以這應該非常快,但內存密集。由於這個原因,大多數瀏覽器將併發websocket的數量限制在256以下。 – 2016-06-02 13:24:52
如果客戶端已斷開連接,send()將引發異常,因此您需要偵聽'close'事件以刪除斷開連接的客戶端。 – broofa 2016-08-03 21:29:25
在其他的答案指出,WebSockets的不支持組播,但它看起來像「WS」模塊維護爲您連接的客戶端列表,因此遍歷它們非常簡單。從the docs:
var WebSocketServer = require('ws').Server
, wss = new WebSocketServer({ port: 8080 });
wss.broadcast = function broadcast(data) {
wss.clients.forEach(function each(client) {
client.send(data);
});
};
- 1. PHP - 向所有客戶端發送異步廣播消息
- 2. SignalR - 廣播到除主叫方以外的所有客戶端
- 3. Websocket發送到特定的客戶端,而不是廣播
- 4. 對jQuery UI的所有客戶端的Socket廣播下降
- 5. 向所有連接的客戶端發送廣播彈出消息
- 6. 如何從服務器向WCF中的所有客戶端發送通知消息(您可以說廣播)?
- 7. websocket從服務器向所有客戶端發送消息
- 8. 是否可以向客戶端發送WebSocket連接?
- 9. 向所有客戶發送廣播消息
- 10. 春天的WebSocket - 我如何可以檢測客戶端斷開
- 11. 我怎麼能廣播到node.js網絡模塊的所有客戶端
- 12. c#中的異步廣播客戶端#
- 13. 來自客戶端的socket.io廣播
- 14. 你可以讓現有的TCP連接的WebSocket向客戶
- 15. Golang websocket客戶端
- 16. javascript websocket客戶端
- 17. Primus-websocket客戶端
- 18. Pair WebSocket客戶端
- 19. 向使用RMI的客戶端發送廣播消息
- 20. 異步客戶端廣播接收器
- 21. 在特定客戶端上廣播SignalR
- 22. 客戶端沒有收到所有使用websocket的消息
- 23. 無法使用Socket.IO向客戶端廣播
- 24. Lua中的WebSocket客戶端
- 25. Haskell中的Websocket客戶端?
- 26. Erlang的Websocket客戶端
- 27. PHP中的WebSocket客戶端?
- 28. 如何使用WCF NetHttpBinding(WebSockets)將一個客戶端發送的消息廣播(推送)到所有客戶端?
- 29. 的WebSocket上的Node.js和所有連接的客戶端
- 30. 如何向Websocket中的所有連接客戶端發送請求
因此,即使使用某種腳本語言,廣播的執行速度與發送消息的速度一樣嗎? – boh 2013-05-22 05:21:26
Websocket框架可能使「廣播」變得容易,但它將在發送引擎下發送離散消息。這就是爲什麼大多數服務器和主機限制連接客戶端的數量(每個Dyno的Heroku限制爲600個客戶端)。 – Myst 2015-07-18 00:41:41