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

★★★ お知らせ ★★★

◆ 6月のPS Liveは決済サービスStripeのデモ!◆
決済サービスのStripeでサブスクリプションの支払い機能を作ってみた
Stripeの機能の一部を切り出して、簡単なサブスクリプションを作るとどうなるのかを、デモをまじえてご紹介します。
⇒ 詳細はこちらから

◆【セミナー開催】 可視化ツールGrafana~初めてのダッシュボード作成◆
デモンストレーション付き!
本セミナーでは、売上データを用いて、4種類のパネル作成方法をお見せします。
⇒ お申込みはこちらから

◆ エンジニア業務環境アンケート結果 ◆
エンジニアが自分の働き方にどういったことで満足していて、不満を感じているのか、働きたい会社像として何を求めているのか、業務環境調査を実施しました。ぜひご覧ください。
⇒ アンケート結果はこちらから

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

※本記事の英語版はこちら(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 武井 宜行 251 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.


*


質問はこちら 閉じる