.NET を使用して Heroku API を試していますSystem.Net.Http.HttpClient
。keep-alive
特に、リクエストごとに SSL ハンドシェイクで TCP 接続を設定するのではなく、1 つの TCP 接続を使用して多くの HTTP リクエストを送信し、1 つの SSL ハンドシェイクのみを実行できるようにしたいと考えています。
私は素敵な HTTP 200 を提供するhttps://api.heroku.com/statusに対してテストしており、Wireshark を使用して TCP トラフィックを監視しています。
Google Chrome、ApacheBench (-k
フラグ付き)、および curl はすべて、TCP 接続を開いたままにして、複数の要求を送信できるようです。HttpClient、それほどではありません。また、他のホストに対して HttpClient をテストしました (例: https://google.com/で、SSL ハンドシェイク/TCP セットアップが 1 つしか表示されないため、HttpClient と Heroku API 間の相互作用が悪いようです。
私がテストしているコードは次のとおりです。
private static async void TestUrl(string url)
{
using (var client = GetClient())
{
await client.GetAsync(url);
await client.GetAsync(url);
await client.GetAsync(url);
await client.GetAsync(url);
}
}
private static HttpClient GetClient()
{
var requestHandler = new HttpClientHandler
{
UseCookies = false,
AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip,
};
return new HttpClient(requestHandler);
}
RST
また、データの受信が完了するとすぐにHttpClient が接続のリセット ( ) を決定する方法を示す Wireshark のスクリーンショットも添付します。
ここで何が起こっているかについて何か提案はありますか?