.NET http送信が遅い時に見直す設定
Nagleアルゴリズムをオフに
https://ja.wikipedia.org/wiki/Nagle%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
https://www.w3.org/People/Frystyk/HTTPSigcomm97.html
https://support.microsoft.com/ja-jp/help/214397
Nagleアルゴリズムとは、昔に提案されたアルゴリズムである
Microsoft TCP スタックでは、小さなデータ パケットによってネットワークが混雑しないように、デフォルトで Nagle アルゴリズムが有効になっています。Nagle アルゴリズムは、複数の送信呼び出しからの小さなデータ バッファを結合し、以前に送信されたデータ パケットに対する ACK がリモート ホストから受信されるまで、結合したデータ バッファの送信を遅延します。
これによりACKが帰ってくるのを待つのに200ms程度ラグを与えてしまうのが
遅延の原因となってしまう
Expect100-Continueをオフに
http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3
- →clientがhttp送信
- ←サーバは100返信
- →clientがようやくhttp bodyを送信
とやりとりの回数が増えてしまう
twitterなどはこれに対応してないため、100Continue問題として多少有名らしい
(ググるとけっこうでてくる)
これらを踏襲したWeb.config
<system.net> <connectionManagement> <!-- Webサーバの場合、リクエストを受け付ける同時接続を増やす --> <add address="*" maxconnection="10000"/> </connectionManagement> <settings> <!-- http送信でのheaderの[expect100continue]をやめる、nagleアルゴリズムの使用をやめて遅延を解除する(TCPオーバーヘッドのリスクを許容したうえでオフにする) --> <servicePointManager useNagleAlgorithm="false" expect100Continue="false" /> </settings> </system.net>