Как поддержание HTTP может / будет играть роль в приложении AJAX - PullRequest
7 голосов
/ 11 января 2010

"keep-alive" его там в HTTP. Некоторые говорят, что это хорошо, но я не могу прийти к какому-либо заключению. Поэтому, пожалуйста, предоставьте свой ввод / ответ / просмотры, чтобы я мог получить некоторые основания для этого,

  1. Что это делает?
  2. Сценарий, где это следует и не следует делать?
  3. Как это может сделать приложение AJAX лучше?
  4. Риски, которые можно и нельзя, если есть?

    Спасибо всем за вклад.

Ответы [ 3 ]

13 голосов
/ 11 января 2010

Прежде всего, если ваше соединение с сервером использует HTTP / 1.1, то, скорее всего, вы уже используете «keep-alive».

Что это? Логически HTTP - это протокол без установления соединения. То есть каждый запрос / ответ к серверу создает новое соединение, делает свое дело и сбрасывает соединение. Однако в HTTP / 1.1 стандартным поведением является сохранение соединения открытым для использования последующими запросами к серверу. Заголовок «keep-alive» был добавлен в HTTP / 1.0, чтобы позволить включить это поведение, в HTTP / 1.1 сервер должен отказаться, закрыв само соединение и / или отправив заголовок «connection-close» в ответ.

Почему это выгодно? Создание соединения, особенно того, которое необходимо аутентифицировать, может занять некоторое время. При повторном использовании существующего соединения установка и аутентификация значительно сокращаются.

Как это может сделать ваше приложение AJAX лучше? Вы, вероятно, уже извлекаете из этого пользу.

Каковы риски? При создании соединения через общее устройство, которое может устанавливать соединение с сервером от имени клиентов, другие клиенты могут повторно использовать соединение, однако это также позволяет другим клиентам использовать соединение, которое имеет сервер аутентифицировано для другого пользователя.

1 голос
/ 13 января 2010

На самом деле все сводится к вопросам производительности и ресурса.

Использование высокого (er) поддержания активности уменьшает задержку при запросах. Это особенно проблема, если вы используете SSL, где есть дополнительные рукопожатия для установления соединения.

OTOH, это будет означать, что дополнительные серверные процессы. Потоки бездействуют, ожидая, когда последующий запрос или срок действия поддержки истекает. Это может увеличить объем памяти и, следовательно, замедлить работу вашего сервера.

Так что вам действительно нужно поиграть и посмотреть, что приемлемо с точки зрения производительности браузера в сравнении с нагрузкой на сервер.

Аутентификация (базовая / дайджест / на основе сеанса) не имеет значения - аутентифицируется запрос, а не сокетное соединение.

Обратите внимание, что в прошлый раз, когда я делал новую установку Apache, он имел настройку по умолчанию 5 секунд для поддержания активности. Это нелепо долго для сайта без AJAX.

С

1 голос
/ 11 января 2010
  1. Он сохраняет сокет TCP для клиента открытым, поэтому вам не нужно восстанавливать соединение для отправки другого HTTP-запроса;
  2. Keep-alive улучшает производительность http, когда много запросов подряд. Однако его не следует использовать, если запросы редки (сервер обычно закрывает соединение, если в течение некоторого периода времени от клиента не поступает больше запросов).
  3. Хорошо, если ваше AJAX-приложение отправляет много запросов серверу, средства поддержки активности улучшают его производительность.
  4. Существует опасность истощения сокетов на стороне сервера, поэтому у сервера есть права на прерывание даже активных соединений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...