【发布时间】:2011-03-10 11:46:41
【问题描述】:
我假设这是不可能的,但想问一下以防万一。如果我想提供一个状态信息网页,我想使用 WebSockets 将数据从服务器推送到浏览器。但我担心的是大量浏览器会对服务器产生影响。我可以向所有客户端广播而不是向每个客户端发送离散消息吗?
【问题讨论】:
标签: javascript node.js websocket
我假设这是不可能的,但想问一下以防万一。如果我想提供一个状态信息网页,我想使用 WebSockets 将数据从服务器推送到浏览器。但我担心的是大量浏览器会对服务器产生影响。我可以向所有客户端广播而不是向每个客户端发送离散消息吗?
【问题讨论】:
标签: javascript node.js websocket
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”模块为您维护了一个已连接客户端的列表,因此很容易遍历它们。来自the docs:
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。
【讨论】: