2012-03-11 8 views
2

どこでもドキュメントを見つけることができ、できるだけ速く複数のメッセージを送信する最良の方法が何であるか知りたい。何が速く複数の小さなメッセージを送信するか、より遅いメッセージをTCPソケットで送信する

たとえば、300台のデバイスが1台のサーバからメッセージを受信した場合、1つの大きなメッセージを送信し、デバイスに必要な部分を選択させるか、300個のメッセージを送信してサイズの1/300を送信させる方がよいでしょう。彼らは小さな刻みでしかないので、300人の奴隷はそれぞれ6バイトしか得られません。

違いがありますか?

ありがとうございました。

+1

「1つの大きなメッセージ」と言えば、TCPを使用すると、それぞれのデバイスに1つの大きなメッセージを送信する必要があります。 TCPを使用しているときにはメッセージをブロードキャストできません(ただし、UDPで行うことはできます)。 –

答えて

1

ソケットのNagleアルゴリズムが有効になっている場合、指定された接続で複数の小さなメッセージを送信すると、通常、同じ接続でより小さいメッセージを送信する速度が遅くなります。 Nagleは送信データを内部的にバッファリングし、効率的なメッセージを送信できるように、十分なデータがバッファリングされるか、タイムアウトするのを待たなければなりません。一般的なソケットの使用では、Nagleを有効にしておくと、通常、速度、パフォーマンス、およびオーバーヘッドのバランスがよく、ほとんどのアプリケーションで受け入れが可能です。しかし、時間の影響を受けやすいメッセージを送信する必要がある場合は、Nagleを無効にして、すべてのメッセージをできるだけ早く個別に送信する必要があります。

複数のデバイスに1つのメッセージを送信する方法については、TCPでは不可能です。おそらく、各デバイスはそれぞれ独自のTCP接続をサーバーと直接接続しています。 1つのメッセージをすべての300の接続に送信するには、各接続に1つずつ、メッセージの独立したコピーを300個作成する必要があります。 TCPには放送機能がありません(必要に応じてUDPまたはマルチキャスティングに切り替える)。 1台のサーバーメッセージを送信して300台のデバイスに応答する唯一の方法は、デバイスがサーバーに直接接続していないが、サーバーへの単一の接続を維持しているプロキシを介して通信し、必要に応じて

+0

彼は300の接続を持っているように聞こえますが、すべての接続と各接続に固有の個々のメッセージのデータをブロードキャストしたいと思っています。これは、あなたが送信したデータに大きさの桁を乗算することになるので、私には無意味に聞こえます! – fido

+0

私は放送を考えていた。私はあなたがTCPでそれを行うことができると思ったが、私は個々のメッセージを送信しないとUDPを調べなければならないと思う。私は、すべての人があまりにも多くの遅延なしにほぼリアルタイムでメッセージを受信できるように、メッセージをできるだけ早く受信したい – NickREd

関連する問題