2011-12-26 1 views
3

私はEntity Framework 4.0をREST Webサービスと併用しています。 クライアント側では、データ/エンティティのロード中に、クライアントは40の連続したWebリクエストを作成しています。HTTP 1.1接続の持続性が永続性よりも速いのはなぜですか?

私は(バイオリン弾きが接続を示しています。クライアント - サーバ間の通信に閉じるヘッダ)をfalseにHttpWebRequest.KeepAliveを設定すると、データのロードが(要求がまだシーケンシャルで)約50%高速である - そして私はなぜ疑問に思って。ウィキペディアから

もHTTPキープアライブと呼ばれるHTTPの永続的な接続、またはHTTP接続の再利用、開口部とは反対に、複数のHTTPリクエスト/レスポンスを送信および受信するために同じTCP接続を使用してのアイデアですリクエスト/レスポンスのペアごとに新しい接続。 キープアライブプロパティがtrueの場合、アプリケーションは、それらをサポートするサーバーへの持続的な接続を行いますMSDNから

。 HTTP/1.1を使用する場合、Keep-Aliveはデフォルトでオン/ trueです。

何が問題なのですか。どのように永続的な要求をスピードアップできますか?

答えて

1

多分、クライアントでは、 IPあたりの同時接続の数は、非永続接続の場合よりも永続接続の方が高くなります。したがって、キープアライブを使用する場合、クライアントは10個のconnを並列に持つことができますが、キープアライブを使用しない場合は、例えば15個の並列接続を持つことができます。

しかし、これはローカルネットワーク上でのみ、接続が確立される速度が非常に速くなります。インターネット(5〜200ミリ秒のRTT)では、新しい接続を開始するためにのみ3倍のRTT時間(SYN、SYN + ACK、ACK)が必要です。だから、あなたは接続を一度しか設定せず、要求として1つのパケットを送信し、応答として1つのパケットを受信するので、キープアライブの速度は4倍速くなります(例えば、1kB未満の画像など)。しかし、キープアライブがなければ、開始するのに3パケットが必要で、要求を送信してから応答を受信し、2パケットを受信して​​接続を閉じます。

関連する問題