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

★★★ Live配信告知 ★★★

9/10のPS Live配信は、Ansibleの概要・特徴から始め、Ansibleでどのような改善、自動化ができるかについて、よくある運用パターンを紹介しながらお話します。
【2021/9/10(金) 17:00〜17:30】

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

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

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

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

どうやら、接続の都度、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





ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



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


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

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

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

Be the first to comment

Leave a Reply

Your email address will not be published.


*