Что такое длинный опрос
Код, который вы представили, не является длинным опросом. Длинный опрос - это когда вы позволяете клиентам ждать чего-либо и позволяете вашему пользовательскому интерфейсу мгновенно реагировать на события на сервере.
Клиент делает обычный ajax-запрос. Код вашего сервера может подождать или сразу же ответить.
Если возвращать нечего (пока), ответ просто длится дольше. Если и когда происходит какое-то ожидаемое событие, он немедленно отправляет ответ.
Клиент опрашивает ваш ajax-запрос, который не отвечает, пока не произойдет какое-либо событие, но когда это событие происходит, он отвечает мгновенно. Ожидается, что клиент сразу же развернется и сделает еще один длинный запрос на опрос.
Предотвращение пропущенных событий
По этой причине вы обычно используете порядковый номер в протоколе длинных опросов. Каждому событию присваивается порядковый номер, и более новые события имеют более высокие порядковые номера, чем более старые события. Если вы можете организовать это, тогда вы можете сделать длинный опрос запросом «получить события с идентификатора». Если есть события, которые они пропустили, он вернет их немедленно. Если вам дали последний порядковый номер, возвращать нечего, так что не возвращайте никакого ответа, просто сделайте это дольше.
Если между длинными опросами проскользнет несколько событий, ваш опрос вернет несколько записей о событиях.
Для вашего кода требуется некоторый способ, который уведомляет событие, чтобы уведомить код, который ожидает отправки ответа. Это можно реализовать в виде опроса с разумной скоростью в хранилище значений ключей, какого-то рода межпроцессных обменов или чего-то достаточно легкого для повторного использования.
Ваши возможности в PHP несколько ограничены из-за его модели процесса. В nodejs или другой однопроцессной серверной архитектуре вы можете использовать простой массив ответов, ожидающих результатов, и вызывать их все, учитывая параметр каждого из них, поскольку происходит новое событие.
Классический пример
Клиент чата является классическим примером этого. Все люди на странице чата проводят долгие опросы, сидящие там, чтобы получить ответ. Страница работает нормально, просто сетевой запрос занимает время в фоновом режиме.
Когда кто-то печатает сообщение, он отправляет его на сервер, и обработчик для этого вставляет сообщение со следующим идентификатором. Все длинные опросы заметят, что новая запись больше, чем искомое значение «поскольку», и они немедленно отправят ответ для всех записей с идентификатором, превышающим параметр «с тех пор». По сути, уведомляет всех других участников чата в течение короткого времени, не заставляя их постоянно проверять наличие новых сообщений.