ソケットにネットワーク エミュレーションを追加する方法を探しています。
基本的な解決策は、接続に帯域幅制限を追加する方法です。
私にとって理想的な解決策は次のとおりです。
- 高度なネットワーク プロパティ (遅延、パケット損失) をサポート
- オープンソース
- 標準ソケットと同様の API を持つ (またはそれらをラップする)
- Windows と Linux の両方で動作
- IPv4 と IPv6 をサポート
システム レベルで、またはプロキシ (Dummynet、WANem、neten など) として機能するいくつかのオプションを見ましたが、各ソケットを手動でエミュレートできるようにしたいので、それは機能しません (たとえば、 , モデム エミュレーションと 3G エミュレーションで 1 つのソケットを開きます. 基本的に、これらのツールがどのように機能するかを知りたいです.
編集:この機能を自分の製品に組み込む必要があるため、追加のボックスや手動構成が必要なサードパーティ ツールを使用することはできません。それらのツールと同じことを行うコードを書きたいのですが、私の質問はそれを行う方法です。
エピローグ:後から考えると、私の質問は少し誤解を招くものでした。どうやら、ソケットで直接やりたいことを行う方法はありません。次の 2 つのオプションがあります。
送信/受信操作に遅延を追加します(@PaulCoccoli の回答に基づく):
送信と受信の前に遅延を追加することで、非常に大まかなネットワーク シミュレーションを取得できます (遅延の一定の遅延、送信の遅延、1 回あたり X バイトを超えて送信しないようにするため) 2 番目は帯域幅です)。
ポールの答えとコメントは私にとって大きなインスピレーションだったので、彼に賞金を授与します。
ネットワーク シミュレーション ロジックをプロキシとして追加します(@m0she および他の回答に基づく):
プロキシ経由でリクエストを送信するか、プロキシを使用してリクエストをインターセプトしてから、目的のシミュレーションを追加します。ただし、独自のプロキシ実装を作成する代わりに、既製のソリューションを使用する方が理にかなっています-私が見たところ、 Dummynetがおそらく最良の選択です (これは webpagetest.org が行っていることです)。他のオプションは以下の回答にあります。DonsProxy
も追加します。
これはより良い方法なので、この回答を受け入れます。