.NET(C#)でのHttpClientクラスの挙動

こんにちは、サイオステクノロジー技術部の武井です。

※本記事の英語版はこちら(Click here to read in English)

マイクロソフト公式の以下のドキュメントにHttpClientクラスの挙動について書かれていました。

https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient

どうやら、接続の都度、HttpClientのインスタンスを生成するのではなく、クラスのStaticな変数に持たせて使いまわせということらしいです。これをちょっと試してみました。

以下のコードを実行してみました。10個のスレッドを立ち上げて、特定のURLのページを取得するという単純なものです。都度、HttpClientのインスタンスを取得しています。

この通信をWireSharkでキャプチャしてみました。該当のサーバーへの通信の中で、TCPのSYNフラグのみが立っているものと、HTTPレスポンスのステータスコードが200のものを抽出しました。確かに接続の都度、TCPコネクションを確立しているようです。

Screen Shot 2018-12-27 at 8.31.37

 

次に以下のコードを実行してみました。マイクロソフト公式ドキュメント通り、HttpClientのインスタンスをStaticでreadonlyにしてみました。

WireSharkでのキャプチャ結果は以下のようになりました。TCPコネクションは2つしか張ってませんが、HTTPレスポンスはきちんと10個あり、しかもそれらのTCPのソースポートは、最初に張った2つのTCPのソースポート(54672と54673)しかないようです。TCPコネクションを使いまわしているように見えます。

Screen Shot 2018-12-27 at 8.29.37

>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメント投稿

メールアドレスは表示されません。


*