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