2009-08-06 22 views
0

私は、特定のポートでリッスンするサーバーアプリケーションFooとFooに接続するクライアントアプリケーションバー(両方とも.NETアプリケーション)を持っています。遅れている着信ネットワーク接続

すべて正常です。ここまでは順調ですね?

しかし、接続が遅くなったり、Fooが応答するまでに時間がかかると、Barに何が起こるのですか?私はそれをテストしなければならない。

私の質問は、どうすればこのような減速をシミュレートできますか?

一般的に大きな問題ではありませんが(そこにはいくつかの無料ツールがあります)、FooとBarはどちらも生産的なマシンで動作しています(はい、生産的なマシンで開発されています。それは私の決断ではない)。だから私は、ネットワークアダプターの全帯域を制限するツールを使用することはできません。

特定のポートの接続を制限したり、接続を遅延させるツールはありますか? .NET/C#でこれを実現することができるので、適切なユニット/統合テストを書くことができますか?

答えて

2

この質問は、アプリケーションの一般的な使用が遅いリンクを介して行われるという既存の前提に基づいています。これは正当な仮定ですか?

  1. これが異常に遅い媒体を介して実行することを目的とTCPコネクションであり、そのようなダイヤルアップなど:

    はたぶん、あなたは、次の質問をする必要がありますか?

  2. アプリケーションが成功するためには、許容可能な最小スループットを定量化できますか?

  3. このような高度にインタラクティブな種類の接続(この場合、帯域幅だけでなく待ち時間も問題になります)ですか?

はい、私はあなたの質問に暗黙のうちに疑問を呈しています。

あなたは上記の質問に答えているため、アプリケーションのメトリクスと成功基準にかなり満足しているとしますが、何かを証明するストレステストが必要だと考えている行くいくつかの方法です。

  1. ツールを使用して「低速接続」をシミュレートします。私は、Linuxのトラフィック制御機能がかなり進歩していることを知っています(LARTCを参照)。本当に柔軟性を持たせたい場合は、Linux仮想マシンをルータとして設定し、PCのデフォルトルートを設定します。おそらく、Windowsには、同様の種類のことを行うことができる無駄な機能の少ないツールがあります。

  2. TCP接続を受け付けるカスタムプロキシアプリケーションを作成し、選択したいくつかのプロファイルに従ってカスタムThread.Sleepの "通過"を行います。薄いTCPコネクションをシミュレートするのは妥当な仕事ですが、幾分科学的ではありません(TCPバックオフアルゴリズムは少し毛があり、正確にシミュレートするのは難しい)。

0

潜在的にsleep()コマンドをコードに入れて遅くすることができますが、これは良い考えではないと思います。

本当にあなたのネットワーク設定に依存して正直言って、私の提案は、いくつかのQOSベースのトラフィックシェーピングなどをすることです。

1

この種のテストにはhttp://netlimiter.com/を使用しました。一部のツールでは、パケット損失をシミュレートすることもできます。

1

私の仕事では、低速/信頼性の低いリンクで転送コードをテストする必要があることがあります。これを行うための最良の方法は、FreeBSD内でdummynetモジュールを使用することです。いくつかのVMをセットアップし、それらの間にフリーブリッジとして透明なブリッジとして機能します。私はdummynetを使ってブリッジを横切ってトラフィックを混乱させ、どんなレイテンシとパケット損失をもシミュレートします。

私は少し前に私のブログで書きました。タイトルはSimulating Slow WAN Links with Dummynet and VMWare ESXです。また、ネットワークインタフェースの動作を制御できる限り、VMWare Workstationや他の仮想化製品でも動作する必要があります。

関連する問題