2

開発速度と安定性の両方で、どの非同期型が最適かを考えています。1000 の同時クライアントをサポートするネットワーク アプリケーションの概念実証を作成しています。

各クライアントは、毎秒 30 バイトのパケットを約 5 個送信します。サーバーは毎秒 200 バイトのパケットを約 5 個送信します。

これらの数値は、ブロッキング ソケットを使用した以前のテストから取得しました。高スループットの SocketAsyncEventArgs の原因を使用する必要があると思いますが、開発には少し時間がかかります。

ありがとう

4

1 に答える 1

5

IIRC と 2 つの主な違いは、SocketAsyncEventArgs多くのオブジェクトを割り当てる必要がないことです (つまり、コールバックなど)。これは、スループットを考えると有効な懸念事項になる可能性があります。特に、これは GC による定期的なパフォーマンスの低下を防ぐのに役立ちます。追加の利点の 1 つは、「これは非同期で実行されるか、同期で実行される可能性があります。どちらかを説明します」というハイブリッドです。慣れるまで少し時間がかかりますが、非常に便利です。

ただし、すべてのものと同様に、高スループット システムは高スループットになるように設計する必要があります。あなたがゼロから始めているなら、私は使用しないSocketAsyncEventArgs理由を見つけるのに苦労するでしょう. SE (50,000 以上の同時接続を処理する) 用の Web ソケット サーバーを作成したとき、特に有用なトリックの 1 つは、すべてのbyte[]バッファーを確実にリサイクルすることでした。プールが空のときに新しいバッファーを割り当てます (また、当然の結果として、プールがいっぱいのときにのみバッファーをフロアにドロップします)。もちろん、そのシナリオでは、毎回すべてのクライアントと話しているわけではありません。定期的に行くなら各クライアントと話している場合、別のオプションとして、各接続にバッファーを固定することもできます。おそらくメモリのオーバーヘッドが増えますが、物事が簡単になるかもしれません。

「開発にも少し時間がかかります」に関しては; 特に、古い非同期モデルに精通している場合は特にそうです。一貫したパフォーマンスのサーバーを持つことがいかに重要であるかに帰着すると思います。もちろん、どちらの方法も厳密なテストが必要です。

于 2012-08-06T08:30:18.023 に答える