我认为这是不可能的,但还想问一下。如果我想提供一个状态信息网页,我想使用WebSockets将数据从服务器推送到浏览器。但我担心大量浏览器对服务器的影响。我能否向所有客户端广播而不是向每个客户端发送离散消息?
我认为这是不可能的,但还想问一下。如果我想提供一个状态信息网页,我想使用WebSockets将数据从服务器推送到浏览器。但我担心大量浏览器对服务器的影响。我能否向所有客户端广播而不是向每个客户端发送离散消息?
WebSockets使用TCP协议,它是点对点的,并且不提供广播支持。
不确定你的客户端/服务器设置如何,但你可以在服务器上保留一个所有连接客户端的集合,然后迭代每个客户端并发送消息。
以下是使用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);
});
});
});
正如其他答案中所述,WebSockets不支持组播,但是'ws'模块似乎为您维护了一个连接客户端列表,因此很容易对其进行迭代。来自文档:
const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({ port: 8080 });
wss.broadcast = function(data) {
wss.clients.forEach(client => client.send(data));
};
是的,可以向多个客户端广播消息。
在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。
Microsoft.Web.WebSockets 命名空间具有广播功能的 WebSocketCollection。在 Nuget 中查找该程序集。名称为 Microsoft.WebSockets。
是的,你可以这样做,而且有很多使用不同脚本语言编写的套接字服务器正在这样做。