我假设这是不可能的,但是想问一下。如果我想提供状态信息网页,我想使用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