EMZETT.
Войти

Приложение реального времени

Коротко: Приложение, в котором данные обмениваются между клиентом и сервером (или между несколькими клиентами) без заметной задержки — например, чаты, живые дашборды или многопользовательские игры.

Подробнее: Классический HTTP не подходит для приложений реального времени, так как клиент должен активно запрашивать (polling). Работа в реальном времени обычно достигается через WebSocket, Server-Sent Events или push-службы вроде Pusher, где сервер может самостоятельно отправлять обновления подключённым клиентам.

Подробности

Основное отличие от классических веб-приложений: при обычном HTTP клиент всегда активно спрашивает сервер («pull») — сервер не может сам что-то отправить клиенту. Для функций реального времени есть несколько подходов:

  • Polling: клиент многократно через короткие интервалы запрашивает новые данные — просто реализовать, но неэффективно (много лишних запросов) и никогда по-настоящему не «в реальном времени», а лишь настолько быстро, насколько короток интервал.
  • Long polling: клиент запрашивает, но сервер держит запрос открытым, пока не появится что-то новое (или не наступит тайм-аут) — меньше накладных расходов, чем при чистом polling.
  • WebSocket: соединение, установленное один раз и оставленное постоянно открытым, по которому обе стороны могут в любой момент отправлять данные, — сегодня обычный стандарт для настоящих функций реального времени.
  • Server-Sent Events (SSE): похоже на WebSocket, но только в одном направлении (сервер → клиент), зато проще в реализации.

Emzett использует для функций реального времени (например, уведомлений чата) размещённую службу Pusher, предоставляющую инфраструктуру WebSocket без необходимости запускать собственный сервер WebSocket. Для всех подходов реального времени важна низкая задержка — чем больше пауза между событием и его отображением, тем меньше приложение ощущается как «способное работать в реальном времени».

См. также: Pusher, Задержка (latency)