2011-01-11 7 views
0

私は、200接続/秒の領域で処理する必要があるアプリケーションを書いていますが、C#と.NETがこれを処理するかどうか、また必要ならば本当にこれを行うにはC + +を見ている?多くのソケットを.NETで扱う

SocketAsyncEventArgsが行く方法かもしれないが、私はそれに耕される前にidチェックを考えたようです。

各トランザクションは1秒未満で終了する必要がありますが、差があれば最大15秒かかることがあります。

+0

予想される同時接続数はどのくらいですか? 200 /秒の数字が15秒まで続く(5%は楽しいと言いましょう)ということは、5分後に1000 /同時に起こることを意味します。 – NotMe

+0

着信接続または発信接続? –

答えて

3

このレベルの使用状況を維持しようとすると、オペレーティングシステムの制限が適用されます。一時的なポートはかなり早く期限切れになります。

バーストバースト数を処理するだけであれば、.NETはC++と同じように扱うことができます。 backlogパラメータをListenに調整する必要があります。

+0

IISの上限は何ですか? –

+0

@David:わかりません。しかし、私はIISがオペレーティングシステムの制限をバイパスできないことを知っています。一時的なポートしかなく、 'TIME_WAIT'状態では、200接続/秒の使用量がなくなります。そのような持続的な虐待を受けるには、ファームの前に座っているロードバランサが必要です。 –

+0

+1十分な公正。 OSの限界を判断するテストを書こうと思った。 –

1

私はこの種のことについて書いたhere

サーバ上にTIME_WAITのソケットが蓄積しないようにシステムを設計できれば、OSの観点からはVISTA以降のものであればOKです。サーバー上でTIME_WAITを避けるには、サーバー上のソケットを閉じてlingerをオフにして、TCPスタックがFINではなくRSTを送信するようにするか、クライアントがアクティブクローズを発行してサーバーではなくTIME_WAITに入ります。

あなたの受諾のスピードについて考える必要があるので、非同期受け入れの呼び出しを使用し、それらの多くを投稿し、また、聴取バックログをかなり大きくします。

サーバをテストするコードが必要な場合は、hereから無料でダウンロードできる「マルチクライアントテストハーネス」があります。 ConnectEx()を使用して、構成可能な数のasyncを同時にコマンドラインで制御可能な速度で発行します。私はそれについてもう少し詳しくお話しますhere

C#ではなくC++を使用しようと考えている場合、いくつかのサンプルサーバーを利用できます。hereと、空きI/O完了ポートセットコードhereがあります。

最も重要なことは、IMHOはあなたがtesting for your desired level of scalability from Day 0であることを確認することです。

幸運を祈る!

+0

乾杯しています。 – Dreaddan

関連する問題