Могу ли я вещать всем клиентам WebSocket - PullRequest
16 голосов
/ 01 июля 2010

Я предполагаю, что это невозможно, но хотел спросить, если это так. Если я хочу предоставить веб-страницу с информацией о состоянии, я хочу использовать WebSockets для передачи данных с сервера в браузер. Но меня беспокоит то, как большое количество браузеров будет влиять на сервер. Могу ли я вещать всем клиентам, а не отправлять отдельные сообщения каждому клиенту?

Ответы [ 7 ]

20 голосов
/ 01 июля 2010

WebSockets использует TCP, который является двухточечным, и не обеспечивает широковещательную поддержку.

13 голосов
/ 22 ноября 2014

Не уверен, как настроен ваш клиент / сервер, но вы всегда можете просто сохранить на сервере коллекцию всех подключенных клиентов - а затем выполнить итерацию по каждому из них и отправить сообщение.

Простой пример использования библиотеки Websocket Node:

Код сервера

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);
    });
  });
});
8 голосов
/ 04 августа 2016

Как отмечалось в других ответах, WebSockets не поддерживает многоадресную рассылку, но похоже, что модуль 'ws' поддерживает список подключенных клиентов для вас, поэтому их довольно просто перебирать. От Документы :

var WebSocketServer = require('ws').Server
  , wss = new WebSocketServer({ port: 8080 });

wss.broadcast = function broadcast(data) {
  wss.clients.forEach(function each(client) {
    client.send(data);
  });
};
1 голос
/ 31 июля 2014

Да, возможно рассылать сообщения нескольким клиентам.

В 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.

0 голосов
/ 25 февраля 2014

Пространство имен Microsoft.Web.WebSockets имеет коллекцию WebSocketCollection с возможностью вещания. Ищите сборку в Nuget. Название - Microsoft.WebSockets.

0 голосов
/ 10 сентября 2012

Это действительно зависит от серверной части.Вот пример того, как это делается с использованием Tomcat7 :

Пример сервлета веб-сокетов чата Tomcat 7

и объяснение того, как он построен здесь .

0 голосов
/ 24 ноября 2011

Да, вы можете, и есть много серверов сокетов, написанных на разных языках сценариев, которые делают это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...