PHP Long polling оптимизация

201
24 января 2018, 14:45

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

а) Отправляем аякс запрос, и в пхп, циклом проверяем сообщения, а так же в каждой итерации цикла делаем слип(секунду) для оптимизации. И так, примерно 20-30 секунд, и если ответа нет, возвращаем фалсе. Если сообщения есть, тогда понятно что нужно делать выборку.

б) Так же отправляем запрос аяксом, и делаем одиночную проверку новых сообщений, возвращаем данные, и если сообщений нет, опять через n секунд делаем запрос на пхп сервер, и проверяем сообщения.

То есть разница заключается в том, что в первом способе мы делаем запрос каждые 40 секунд, и эти 40 секунд, примерно каждую одну, проверяются новые сообщения, а между ними идёт слип().

А во втором способе мы делаем каждую секунду запрос на сервер, и там получаем сразу ответ, затем опять небольшая пауза, и запрос.

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

Answer 1

Добрый вечер! Правильная реализация long polling - это делается один длинный запрос, я делал зацикливание на стороне сервера. Ваш первый вариант а) лучше чем - б), потому что с каждым запросом, а это запрос в бд, т.е. нужен или не нужен, он всегда будет запрашивать данные с бд, а это как раз нагрузка. Так что делайте по первому варианту и ставьте просто тайм-аут 20-30 сек. И еще по возможности обойтись от сессии в цикле!

READ ALSO
Приём файлов AJAX -> PHP

Приём файлов AJAX -> PHP

Не могу разобраться, при отправке файлов без Ajax - всё норм, при отправке через Ajax - письмо с вложением не отправляется

274
Поставить балун для каждого маршрута и отцентрировать карту относительно нескольких маршрутов яндекс карты(API 2.1)

Поставить балун для каждого маршрута и отцентрировать карту относительно нескольких маршрутов яндекс карты(API 2.1)

Есть карта, с несколькими маршрутами, как поставить балун для каждого маршрута, чтоб по нажатию на маршрут он открывался, и как отцентрировать...

315