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