回答:
Windowsを実行している場合、fiddlerは優れたツールです。モデムの速度をシミュレートする設定があり、さらに制御が必要な人のために、各リクエストにレイテンシを追加するプラグインがあります。
このようなツールを使用すると、アプリケーションにレイテンシコードを配置するよりもずっと現実的なシミュレーションになるため、実際のビットを設計したりコード化したりする必要がありません。最高のコードは、私が書く必要がないコードです。
追加:Pavel Donchevのブログ、Software Technologiesに関するこの記事は、カスタムのシミュレーション速度を作成する方法を示しています:Fiddlerでインターネット接続速度を制限する。
Chrome 38以降、プラグインなしでこれを行うことができます。要素の検査(またはF12ホットキー)をクリックし、[デバイスのmodの切り替え]をクリックすると、次のように表示されます。
他の多くの機能の中で、特定のインターネット接続(3G、GPRS)をシミュレートできます
アップロード速度を制限しようとする人のためのPS。悲しいことに、現時点ではそれは不可能です。
PS2では、何も切り替える必要はありません。スロットルパネルは、ネットワークパネルから直接使用できます。
[ スロットルなし ]をクリックすると、カスタムスロットルオプションを作成できることに注意してください。
私はhttp://www.netlimiter.com/を使用していて、それは非常にうまく機能しました。単一プロセスの速度を制限するだけでなく、実際の転送速度も表示します。
iprelayやSloppyなどのTCPプロキシは、低速接続をシミュレートするために帯域幅シェーピングを実行します。ipfwやiptablesなどのIPフィルタリングツールを使用して、帯域幅シェーピングを実行し、パケット損失をシミュレートすることもできます。
NetEm(ネットワークエミュレーション)をプロキシサーバーとして使用して、多くのネットワーク特性(速度、遅延、パケット損失など)をエミュレートできます。iproute2パッケージを使用してネットワークを制御し、ほとんどのLinuxディストリビューションのカーネルで有効になっています。
tc
コマンドラインアプリケーション(iproute2パッケージから)によって制御されますが、NetEm用のいくつかのWebインターフェイスGUIもあります(例:PHPnetemGUI2)。。
利点は、私が書いたように、さまざまなネットワーク速度だけでなく、たとえば、パケット損失、複製や破損、ランダムまたは定義された遅延などもエミュレートできるため、パフォーマンスの低いさまざまなネットワークをエミュレートできることです。
アプリケーションの場合は完全に透過的です。オペレーティングシステムを構成してNetEmプロキシサーバーを使用すると、そのマシンからのすべての接続がNetEmを経由するようになります。または、アプリケーションをプロキシとして使用するように構成することもできます。
私はこれを使用して、エミュレートされたさまざまなパフォーマンスの低いネットワークでAndroidアプリのパフォーマンスをテストしています。
10.10以降のMac OSXにはMurus Firewallというアプリがあり、ipfwの代わりにpfのGUIとして機能します。
これは、システム全体またはドメイン固有のスロットルに非常に適しています。私はそれを使用してダウンロード速度を300Kbpsと30Mbpsの間でスライドさせ、ストリーミングビデオプレーヤーがどのように調整されるかをテストすることができました。
私が探していた答えが言及されなかったので、これを(質問されてから9年後に)更新しました。
Firefoxには、接続速度を調整するためのプリセットもあります。これらは、開発者ツールの[ ネットワークモニター ]タブで見つけてください。デフォルトは「スロットルなし」です。
最も遅いのはGPRS(ダウンロード速度:50 Kbps、アップロード速度:20 Kbps、最小遅延(ms):500)で、「良好」および「通常」の2G、3G、4GからDSLおよびWiFiまで(ダウンロード速度:30Mbps、アップロード)速度:15Mbps、最小遅延(ms):2)。
詳細については、開発ツールのドキュメントをご覧ください。
Linuxの場合、次の論文リストが役立つ可能性があります。
個人的には、Dummynetは良いのですが、私のユースケースではNetEmが最も用途が広いと思います。私は通常、帯域幅ではなく遅延の影響(つまりWiFi接続の問題)に関心があり、ランダムなパケット損失/破損などをエミュレートするのは非常に簡単です。また、非常にアクセスしやすく、無料です(ハードウェアベースのリンクトロピーとは異なります))。
補足として、Windowsの場合、Clumsyは素晴らしいです。また、(ウェブサイトに関して)ブラウザスロットリングは実際のネットワークの問題をエミュレートする正確な方法ではないことも付け加えておきます(「TKK」が上記の理由のいくつかについてコメントしていると思います)。
これが誰かを助けることを願っています!
単一のTCP接続を成形する一つの一般的なケースでは、実際のデュアルペアから組み立てることができるsocat
とcpipe
、このようなUNIX方式で:
socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'
これは、約300KB /秒の帯域幅との接続をシミュレートからのあなたのサービスを:5000
してまで約時を10kB / sであり、上のリッスン:5555
着信接続用。警告:このことを注意接続ごとの個々のTCPコネクションそうで、この金額を取得します。
説明:外側(左)socat
は、指定さ:5555
れたオプションを使用してフォーキングサーバーとしてリッスンします。次にcpipe
、SYSTEM:...
オプションの最初のコマンドは、ソケット:5555に送信されたデータ(および最初のアウターsocat
から送信されたデータ)を最大10kByte / sにスロットルします。次に、そのデータは、socat
接続する別のサーバーを使用して転送しlocalhost:5000
ます(減速したいサービスがリッスンしている必要があります)。からの データlocalhost:5000
は、適切なcpipe
コマンドに入力され、(指定された値で)約300kB / sに調整されます。
オプション-ngr
にはcpipe
重要です。これにより、cpipeは入力ファイル記述子から欲張らずに読み取ります。そうしないと、転送されず、応答を待機していないバッファー内のデータでスタックする可能性があります。
buffer
代わりに、より一般的なツールを使用することcpipe
も可能です。
(クレジット:これは、socat
ドキュメントのChristophe Loorによる「ダブルティー」レシピに基づいています)