30

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

4

7 に答える 7

32

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

于 2010-07-01T09:06:51.240 に答える
28

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

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);
    });
  });
});
于 2014-11-22T01:15:49.060 に答える
21

他の回答で述べたように、WebSocket はマルチキャストをサポートしていませんが、「ws」モジュールが接続されたクライアントのリストを保持しているように見えるため、それらを反復するのは非常に簡単です。ドキュメントから:

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

wss.broadcast = function(data) {
  wss.clients.forEach(client => client.send(data));
};
于 2016-08-03T21:36:33.753 に答える
3

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

ジャワでは、

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

于 2014-07-31T10:41:43.123 に答える
0

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

于 2011-11-24T10:19:32.730 に答える
0

それは実際にはサーバー側に依存します。Tomcat7を使用して実行する方法の例を次に示します。

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

そして、それがどのように構築されているかについての説明がここにあります

于 2012-09-10T16:54:13.373 に答える
0

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

于 2014-02-25T19:40:42.183 に答える