web-dev-qa-db-ja.com

すべてのWebSocketクライアントにブロードキャストできますか

これは不可能だと思いますが、可能であれば質問したいと思います。ステータス情報のWebページを提供したい場合は、WebSocketを使用してサーバーからブラウザーにデータをプッシュします。しかし、私の懸念は、多数のブラウザーがサーバーに与える影響です。各クライアントに個別のメッセージを送信するのではなく、すべてのクライアントにブロードキャストできますか?

18

WebSocketsはポイントツーポイントであるTCPを使用し、ブロードキャストサポートを提供しません。

21
nos

クライアント/サーバーの設定がどのようになっているのかはわかりませんが、接続されているすべてのクライアントのコレクションをサーバーに保持して、各クライアントを繰り返し処理してメッセージを送信することができます。

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);
    });
  });
});
14
Nicholas Pufal

他の回答で述べたように、WebSocketはマルチキャストをサポートしていませんが、「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);
  });
};
8
broofa

はい、複数のクライアントにメッセージをブロードキャストすることは可能です。

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

1
Barnwal Vivek

Microsoft.Web.WebSockets名前空間には、ブロードキャスト機能を備えたWebSocketCollectionがあります。 Nugetでアセンブリを探します。名前はMicrosoft.WebSocketsです。

0
tupefacto

それは本当にサーバー側に依存します。 Tomcat7 を使用してどのように行われるかの例を次に示します。

Tomcat 7チャットWebSocketサーブレットの例

そしてそれがどのように構築されているかの説明 ここ

はい、できます。さまざまなスクリプト言語で記述されたソケットサーバーが数多くあります。

0
Johnydep