1

私は Node.js でプログラムされた Websocket サーバーで作業しており、20,000 人以上のユーザーにマルチキャスト メッセージを送信することを計画しています。メッセージは一定の秒間隔で送信されますが、Node.js サーバーからのパフォーマンスが心配です。

Node.js が非同期で動作し、必要に応じてスレッドを作成および破棄することは理解していますが、その効率性については確信が持てません。理想的には、平均レイテンシ 5 ミリ秒でメッセージを送信したいと考えています。

現在、次のように、接続されているすべてのクライアントの for ループを実行して、すべてのユーザーにメッセージを送信しています。

function StartBroadcastMessage()
{
  console.log("broadcasting socket data to client...!");

  for(var i=0;i < clientsWithEvents.length;i++){ //Runs through all the clients

      client = clientsWithEvents[i];
      if(client.eventid.toLowerCase() == serverEventName.toLowerCase()) //Checks to see if the Client Event names and server names are the same
        client.connection.sendUTF(GetEventSocketFeed(client.eventid)); //Sends out event data to that particular client
    }

  timeoutId = setTimeout(StartBroadcastMessage,2*1000);
}

これは、待ち時間の短いマルチキャスト メッセージを送信する効率的な方法ですか、それとももっと良い方法がありますか?

また、Websocket サーバーに接続された多数のデバイスをシミュレートして、サーバー上で負荷テストを実行する効率的な方法はありますか? (これまでのところ、この Node アプリを見つけましたhttps://github.com/qarea/websockets-stress-test )

4

1 に答える 1

1

socket.io を使用してメッセージをブロードキャストできます。

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.broadcast.emit('user connected');
});

これにより、個々のメッセージをクライアントに送信する際のレイテンシ (すべてのソケット オブジェクトの繰り返しとメッセージのフォーマット) が回避されます。

于 2013-06-15T19:45:49.227 に答える