1 秒あたりの Web リクエスト数を多くしようとしています。
C# では、複数のスレッドを使用して webrequest を送信しましたが、作成したスレッドの数に関係なく、サーバーが迅速に応答する条件では、webrequest の最大数は 1 秒あたり約 70 であることがわかりました。
未処理の同時 Web リクエストを作成して理解を深めるために、フィドラーを使用してタイムアウト応答をシミュレートしようとしました。
スレッドの数に関係なく、2x のリクエストが即座に起動され、その後、キューに入れられたリクエストが 1 つずつ非常にゆっくりと起動されましたが、前のリクエストはまだ応答を取得していました。要求が完了すると、キューに入れられた要求がより速く起動され、量が補充されました。事前に初期化された量に達すると、初期化に時間がかかるようです。さらに、応答は十分に小さいため、帯域幅の問題は無視できます。
以下はコードです。
別のネットワークでwindow xpとwindow 7で試しました。同じことが起こります。
public Form1()
{
System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
for (int i = 0; i < 80; i++)
{
int copy = i;
new Thread(() =>
{
submit_test(copy);
}) { IsBackground = true }.Start();
}
}
public void submit_test(int pos)
{
webRequest = (HttpWebRequest)WebRequest.Create("http://www.test.com/");
webRequest.Method = "GET";
using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
{
}
}
即時発射量を制限しているのはネットワークカードですか?
大規模なサーバーでは、何千もの着信要求を同時に処理できることを知っています。リクエストを送る(接続を確立する)のと同じではないですか?
サーバーを使用すると問題が解決するかどうか教えてください。
更新の手がかり:
1) ルーターが制限してプラグを抜いたのではないかと思います。変わりはない。
2) Fiddler は、キューに入れられた 1 つのリクエストが 1 秒ごとに正確に発生したことを示しています
3) Apache ベンチマーク ツールを使用して同時タイムアウト リクエストを送信しようとしたところ、同じことが起こりました。おそらく .Net の問題ではありません。
4) 代わりに localhost に接続しようとしています。変わりはない
5) 代わりに begingetresponse を使用しましたが、違いはありません。
6) これはフィドラーの問題ではないかと思います。トラフィックをキャプチャするためにwiresharkも使用しています。賢明なことに、保留された送信要求はフィドラーによってエミュレートされ、実際に応答が受信されました。実際には未処理のリクエストはありません。リクエストをキューに入れているのはフィドラーのようです。テストするためのより良い方法を見つけたら、質問を編集/閉じます
私はすでに数日間この問題に悩まされていました。考えられる可能性があれば教えてください。