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

时间:2010-07-01 06:32:12

标签: html5 websocket

我认为这是不可能的,但是想要问以防万一。如果我想提供状态信息网页,我想使用WebSockets将数据从服务器推送到浏览器。但我担心的是大量浏览器对服务器的影响。我可以向所有客户广播而不是向每个客户发送离散消息吗?

7 个答案:

答案 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)

这真的取决于服务器端。以下是使用Tomcat7完成工作的示例:

Tomcat 7 Chat Websockets Servlet Example

以及如何构建here的解释。

答案 6 :(得分:0)

Microsoft.Web.WebSockets命名空间具有带广播功能的WebSocketCollection。在Nuget中寻找组件。名称是Microsoft.WebSockets。