Javascript 我可以向所有WebSocket客户端广播吗

Javascript 我可以向所有WebSocket客户端广播吗,javascript,node.js,websocket,Javascript,Node.js,Websocket,我假设这是不可能的,但我想问问万一是这样的话。如果我想提供状态信息网页,我想使用WebSocket将数据从服务器推送到浏览器。但我担心的是大量浏览器会对服务器产生影响。我是否可以向所有客户端广播,而不是向每个客户端发送离散的消息?WebSocket使用TCP,它是点对点的,不提供广播支持。是的,您可以这样做,而且有许多用各种脚本语言编写的套接字服务器正在这样做 这实际上取决于服务器端。下面是一个示例,说明如何使用: 以及对其构造方式的解释。Microsoft.Web.WebSockets命名空

我假设这是不可能的,但我想问问万一是这样的话。如果我想提供状态信息网页,我想使用WebSocket将数据从服务器推送到浏览器。但我担心的是大量浏览器会对服务器产生影响。我是否可以向所有客户端广播,而不是向每个客户端发送离散的消息?

WebSocket使用TCP,它是点对点的,不提供广播支持。

是的,您可以这样做,而且有许多用各种脚本语言编写的套接字服务器正在这样做

这实际上取决于服务器端。下面是一个示例,说明如何使用:


以及对其构造方式的解释。

Microsoft.Web.WebSockets命名空间具有具有广播功能的WebSocketCollection。在Nuget中查找程序集。名称为Microsoft.WebSockets。

是的,可以向多个客户端广播消息

在爪哇

  @OnMessage
  public void onMessage(String m, Session s) throws IOException {
  for (Session session : s.getOpenSessions()) {
    session.getBasicRemote().sendText(m);
   }
}
这里解释一下。
.

不确定客户端/服务器的设置如何,但您可以始终在服务器中保留所有连接客户端的集合,然后对每个客户端进行迭代并发送消息

使用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”模块为您维护了一个已连接客户端的列表,因此遍历它们非常容易。发件人:


因此,即使使用一些脚本语言,广播的执行速度是否与逐个发送消息的速度相同?Websocket框架可能会使“广播”变得容易,但它将在幕后发送离散的消息。这就是为什么大多数服务器和主机限制连接的客户端数量(Heroku限制过去是每个Dyno有600个客户端)。我知道这很旧,但我今天发现它显然仍然可见。现在有很多选项可以“广播”到所有连接的WebSocket。如果您使用节点服务器,您可以使用“npm i ws”之类的库,循环通过每个客户端并发送数据。循环通过每个客户端并不是一种有效的方法,比如当您有大量客户端时。它将延迟到循环中的最后一个客户端。那么,还有什么替代方法呢?因为send只是套接字缓冲区的本机副本,所以它应该非常快,但占用大量内存。由于这个原因,大多数浏览器将并发WebSocket的数量限制在256以下。如果客户端已断开连接,send()将引发异常,因此您需要侦听“close”事件以删除断开连接的客户端。但为了避免看到有10000个用户已连接,我是否需要将它们全部循环?这很费时。有什么技术可以向某些人广播吗users@mandaputtra“WebSocket不支持多播”-您还需要什么信息?
const WebSocketServer = require('ws').Server;
const wss = new WebSocketServer({ port: 8080 });

wss.broadcast = function(data) {
  wss.clients.forEach(client => client.send(data));
};