Непостоянные соединения HTTP 1.1 быстрее, чем постоянные? - PullRequest
3 голосов
/ 26 декабря 2011

Я использую Entity Framework 4.0 вместе с веб-сервисом REST.На стороне клиента, во время загрузки данных / сущностей, клиент делает 40 последовательных веб-запросов.

Когда я устанавливаю HttpWebRequest.KeepAlive в false (Fiddler показывает Соединение: Закрыть заголовки в клиент-сервереобмен данными), загрузка данных быстрее около 50% (запросы все еще последовательны) - и мне интересно, почему.

Из Википедии: Постоянное соединение HTTPТакже называется HTTP keep-alive или повторное использование HTTP-соединения. Идея заключается в том, чтобы использовать одно и то же TCP-соединение для отправки и получения нескольких HTTP-запросов / ответов, в отличие от открытия нового соединения для каждой отдельной пары запрос / ответ.

От MSDN: Если свойство KeepAlive имеет значение true, приложение устанавливает постоянные соединения с серверами, которые их поддерживают.При использовании HTTP / 1.1 Keep-Alive по умолчанию включен / true.

Что не так?Как я могу ускорить постоянные запросы?

1 Ответ

1 голос
/ 05 января 2012

Может на клиенте лимит на нет. количество одновременных соединений на IP выше для непостоянных соединений, чем для постоянных. Таким образом, при использовании keep-alive клиент мог позволить вам иметь 10 параллельных подключений, но если не использовать keep-alive, вы можете иметь, например, 15 параллельных соединений.

Но это будет быстрее только в локальной сети, где установление соединения происходит очень быстро. В Интернете (RTT 5-200 мс) вам потребуется 3 раза RTT (SYN, SYN + ACK, ACK) только для того, чтобы начать новое соединение. Поэтому, особенно если у вас много небольших запросов (например, изображений размером менее 1 КБ), скорость поддержки активности может быть в 4 раза выше - поскольку вы устанавливаете соединение только один раз, а затем отправляете 1 пакет как запрос и получаете 1 пакет в качестве ответа. Но без поддержки активности вам нужно 3 пакета для начала, затем отправить запрос, затем получить ответ, а затем 2 пакета, чтобы закрыть соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...