Могу ли я транслировать все клиенты WebSocket

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

Ответ 1

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

Ответ 2

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

Простой пример с использованием 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);
    });
  });
});

Ответ 3

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

В 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

Как отмечалось в других ответах, 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);
  });
};

Ответ 5

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

Ответ 7

В пространстве имен Microsoft.Web.WebSockets имеется функция WebSocketCollection с возможностью широковещательной рассылки. Посмотрите на сборку в Nuget. Это имя Microsoft.WebSockets.