Просто ради аргумента.
Оба являются http-запросом (xhr), и, по крайней мере, частично не соответствуют действительности, он использует больше ресурсов сервера (полностью зависит от технологии, объясню позже).
Короткий опрос.
Лот запроса, который обрабатывается по мере поступления на сервер.Создает много трафика (использует ресурсы, но освобождает их, как только ответ отправляется обратно):
00:00:00 C-> Is the cake ready?
00:00:01 S-> No, wait.
00:00:01 C-> Is the cake ready?
00:00:02 S-> No, wait.
00:00:02 C-> Is the cake ready?
00:00:03 S-> Yeah. Have some lad.
00:00:03 C-> Is the other cake ready? ..
Длинный опрос
Один запрос отправляется на сервер, и клиент ожидает ответаприйти (его неразрешенным).В случае Server с php / apache будет означать порожденный поток для обработки, который резервирует ресурсы до его завершения.Таким образом, трафик меньше, но вы быстро поглощаете свои ресурсы (или, скорее, блокируете ресурсы).Но если вы используете, например, Node (или любой другой асинхронный подход - например, c ++ qt), вы можете потенциально минимизировать использование ресурса (сохранить объект ответа для запроса http и использовать его, когда работа будет готова)
12:00 00:00:00 C-> Is the cake ready?
12:00 00:00:03 S-> Yeah.Hame some lad.
12:00 00:00:03 C-> Is the cake ready?
Если вы сравните это с коротким опросом, вы увидите, что потенциально при коротком опросе вы использовали больше передачи, но в течение этих трех секунд вы фактически тратите 1,5 секунды времени обработки (что означает, что что-то может выполняться между вашими вызовами).В случае длинного опроса все время использовались одни и те же ресурсы.Теперь обычно php со всеми библиотеками начинается с 4 МБ памяти - тогда у вас есть фреймворк 4-20 МБ.Предположим, у вас есть 1024 МБ оперативной памяти (бесплатно).Скажем, давайте будем пессимистичны и предположим, что вы будете использовать 25 МБ на один пакет php.Это означает, что вы можете получить только 40 длинных скриптов соединения.
Именно поэтому вы могли потенциально обслуживать с Node потенциально гораздо больше, поскольку узел не будет порождать свои экземпляры (если вы не хотите использовать рабочих и т. Д.), Так что с той же памятью вы, вероятно, могли бы легко получить 10k соединенийповешение.Вы получите скачок в ЦП, когда они появятся, и когда они потенциально могут быть освобождены, но когда они простаивают, их как будто их нет (вы платите только за структуры памяти, которые вы бы сохранили в node / c ++).
Websocket
Теперь, если вы хотите отправить несколько вещей, когда они находятся в клиенте или вне его, перейдите к веб-сокетам (протокол ws).Первый вызов - это размер HTTP-запроса, но позже вы отправляете только сообщения от клиента к серверу (новые вопросы) и от сервера к клиенту (ответы или ответы - даже можно выполнять широковещательную рассылку для всех подключенных клиентов).Существуют библиотеки php websocekts, но опять же, используйте другую технологию - предпочтительно, node или c ++.
Некоторые библиотеки, например socket.io, имеют собственную иерархию, поэтому при сбое websocket происходит возврат к длинному или короткомуопрос.
Когда использовать.
Короткий опрос - ну, никогда ^^.
Длинный опрос - потенциально, когда выобмен одиночным вызовом с сервером, и сервер выполняет некоторую работу в фоновом режиме.Также, когда вы больше не будете запрашивать сервер на той же странице.Также, когда вы не используете php в качестве слоя для обработки длинного опрашиваемого соединения (node / c ++ может быть простым промежуточным уровнем).Обратите внимание, что длительный опрос может быть действительно полезным, но только тогда, когда вы сделаете это.
Websocket - вы потенциально будете обмениваться более чем одним или двумя вызовами с сервером, или что-то может исходить от сервера, который выне ожидал / спросил, как уведомление по электронной почте или что-то.Вы должны планировать разные «комнаты», в зависимости от функциональности.Охватите основанный на событиях характер javascript;]