Опрос против длинного опроса

Я попал в эти примеры, показывая опрос и длительный опрос в javascript, однако я не понимаю, как они отличаются друг от друга. Особенно в отношении длинного опроса, как он закрывает свое соединение?

Вот как выглядит традиционный сценарий опроса:

(function poll(){
  setTimeout(function(){
    $.ajax({ url: "server", success: function(data){
      //Update your dashboard gauge
      salesGauge.setValue(data.value);

      //Setup the next poll recursively
      poll();
    }, dataType: "json"});
  }, 30000);
})();

и это пример длинного опроса:

(function poll(){
  $.ajax({ url: "server", success: function(data){
    //Update your dashboard gauge
    salesGauge.setValue(data.value);

  }, dataType: "json", complete: poll, timeout: 30000 });
})();

Спасибо!

Ответ 1

Разница заключается в следующем: длительный опрос позволяет уведомлять о каком-либо событии, поэтому сервер может активно отправлять данные клиенту. Обычный опрос - это периодическая проверка данных для извлечения, так сказать. Википедия довольно подробно рассказывает о том, что:

При длительном опросе клиент запрашивает информацию с сервера аналогично обычным опросам; однако, если сервер не имеет никакой информации, доступной для клиента, вместо отправки пустого ответа сервер держит запрос и ожидает, что информация станет доступной (или для подходящего события таймаута), после чего полный ответ будет наконец, отправлен клиенту.

Длительный опрос уменьшает объем данных, которые необходимо отправить, поскольку сервер отправляет данные только тогда, когда действительно есть данные, поэтому клиенту не нужно проверять каждый интервал x.

Если вам нужен более совершенный (и более элегантный) способ полнодуплексного взаимодействия клиент/сервер, подумайте об использовании протокола WebSocket, это здорово!

Ответ 2

Опрос в основном процесс периодической проверки сервера для информации после запроса клиента. Если требуемая информация доступна, она будет отправлена ​​клиенту в форме ответа, иначе сервер отправит пустой ответ. Опрос выполняется с помощью таких функций, как setInterval() и setTimeout().

В случае Длинный опрос клиент делает запрос на сервер и, если ответ доступен, сервер в противном случае отвечает на него, удерживает запрос пока требуемая информация недоступна. В отличие от традиционного опроса, где сервер ответил бы с пустым ответом.

Ответ 3

Для опроса клиент будет запрашивать данные с сервера, обычно через регулярные промежутки времени, и сервер будет либо отвечать с последним состоянием, либо вообще ничего не делать. Основная проблема с опросом заключается в том, что клиент не знает, когда запрашивать данные. Это часто приводит к запросам данных, где данные фактически не были изменены с момента последнего запроса, или к запросам данных через некоторое время после первоначального изменения. Обе ситуации являются неоптимальными.

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