7

.NET を使用して Heroku API を試していますSystem.Net.Http.HttpClientkeep-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 のスクリーンショットも添付します。

Wireshark のスクリーンショット

ここで何が起こっているかについて何か提案はありますか?

4

2 に答える 2