Механизмы обмена между клиентом и сервером

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

Я лишь рассмотрю некоторые из них...

  1. Просто отправлять на сервер запросы раз в секунду или 20 раз в секунду, смотря как критичны задержки, например долбить аяксом на свой сервер и если он ответил что-то, то обновлять информацию в приложении (например фронтенд сайта на стороне браузера).
  2. Открыть сокет и слушать данные, но это не везде реализуемо легко, зависит от типа приложения...
  3. Веб хуки или CallbackAPI, это больше при обмене сервер-сервер, когда ваш сервер тоже может принимать запросы от основного, и если там что-то происходит - он вам отправляет данные и вы их обрабатываете, тут лучше применять механизм очередей, складывать быстро и отвечать ок, а потом на фоне обрабатывать.
  4. Long Pooling (Long Pool api) - вы отправляете запрос и ждете, как только данные появляются, вам приходит ответ, об этом способе хотел рассказать сегодня в этой статье.

Long Pooling

Итак, что же это такое Long Pooling? Как он работает? Попробуем в этом разобраться. Представьте такой момент когда вы открываете сайт, но у вас висит белый экран пустой, крутится кружочек, думает, думает, вот проходит уже 15 секунд, а он всё думает, а потом загрузился с ответом что ничего нового, ждали например 30 секунд.

Если данные появились раньше чем через 30 секунд, то сервер отдаст ответ как только так сразу, например через 0.2 секунды.

Как только мы получили ответ от сервера - снова отправляем запрос и ждем.

Что мы от этого имеем? Мы получаем новые данные по мере их поступления сразу, если новых событий достаточно мало, а у нас задержки критичные не больше секунды, то при первом способе мы бы отправляли 60 запросов в минуту, а так достаточно например только 2х.

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

Но если вы делаете сервер с поддержкой long pooling, вам нужно конкретно продумать и настройку самого сервера и ваших скриптов, наверно лучше организовать очереди и молниеносно выбрасывать список сообщений, а не долбить базу, не выполнять сложные обработки.

Показать комментарии