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

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【3/22開催】テックブログを書こう!アウトプットのススメ
1年で100本ブログを出した新米エンジニアがPV数が伸びなくてもTech Blogを書き続ける理由とは?
https://tech-lab.connpass.com/event/312805/

【4/18開催】VSCode Dev Containersで楽々開発環境構築祭り〜Python/Reactなどなど〜
Visual Studio Codeの拡張機能であるDev Containersを使ってReactとかPythonとかSpring Bootとかの開発環境をラクチンで構築する方法を紹介するイベントです。
https://tech-lab.connpass.com/event/311864/

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

※本記事の英語版はこちら(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

アバター画像
About 武井 宜行 267 Articles
Microsoft MVP for Azure🌟「最新の技術を楽しくわかりやすく」をモットーにブログtech-lab.sios.jp)で情報を発信🎤得意分野はAzureによるクラウドネイティブな開発(Javaなど)💻「世界一わかりみの深いクラウドネイティブ on Azure」の動画を配信中📹 https://t.co/OMaJYb3pRN
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

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

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


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



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

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる