我认为这是不可能的,但是想要问以防万一。如果我想提供状态信息网页,我想使用WebSockets将数据从服务器推送到浏览器。但我担心的是大量浏览器对服务器的影响。我可以向所有客户广播而不是向每个客户发送离散消息吗?
答案 0 :(得分:19)
WebSockets使用TCP,这是点对点的,并且不提供广播支持。
答案 1 :(得分:13)
不确定您的客户端/服务器是如何设置的,但您始终可以在服务器中保留所有已连接客户端的集合 - 然后遍历每个客户端并发送消息。
使用Node的Websocket库的一个简单示例:
服务器代码
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);
});
});
});
答案 2 :(得分:7)
正如其他答案所述,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);
});
};
答案 3 :(得分:1)
是的,可以向多个客户端广播消息。
在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
答案 4 :(得分:0)
是的,您可以并且有许多套接字服务器以各种脚本语言编写。
答案 5 :(得分:0)
答案 6 :(得分:0)
Microsoft.Web.WebSockets命名空间具有带广播功能的WebSocketCollection。在Nuget中寻找组件。名称是Microsoft.WebSockets。