Пользователи больше не готовы нажимать F5, чтобы узнать, ответил ли менеджер или изменилась ли цена. Мессенджеры, банковские приложения и сервисы доставки приучили всех к тому, что данные обновляются сами — за доли секунды. Технология, которая это обеспечивает, называется realtime, а её стандартный стек в вебе — WebSocket и Node.js. В статье разберём, как realtime устроен под капотом, какие бизнес-задачи он решает, сколько это стоит по нагрузке и серверам — и в каких случаях достаточно более простых решений.
Что такое realtime и почему это уже норма, а не преимущество
Realtime (реальное время) — это когда данные с сервера приходят в интерфейс автоматически за 50–300 мс, без перезагрузки страницы и без действий пользователя. Открываете чат — сообщения приходят мгновенно, как в Telegram. Курьер движется по карте, счётчик «осталось 2 товара» уменьшается, в админке всплывает уведомление о новом заказе — всё это realtime. Для бизнеса это напрямую влияет на деньги: менеджер, который видит заявку в момент отправки, отвечает быстрее конкурента и чаще закрывает сделку. Перевод поддержки с почты на realtime-чат сокращает среднее время ответа с десятков минут до секунд. А пользователь, которому пришлось перезагрузить страницу, чтобы увидеть ответ, с высокой вероятностью уже ушёл.Три способа обновлять данные: polling, SSE и WebSocket
Классический веб построен на модели «клиент спросил — сервер ответил». Чтобы данные обновлялись сами, есть три рабочих подхода:- HTTP-polling (регулярный опрос). Браузер каждые 2–5 секунд спрашивает сервер: «есть что новое?». Просто в реализации, но расточительно: 1 000 активных пользователей с интервалом 3 секунды генерируют около 1,2 млн запросов в час, и большинство ответов — «ничего нового».
- SSE (Server-Sent Events). Сервер сам присылает события клиенту по одному открытому соединению. Дёшево и отлично подходит для уведомлений и лент, но канал работает только в одну сторону — чат на SSE не построить.
- WebSocket. Одно постоянное двустороннее соединение: после рукопожатия клиент и сервер обмениваются сообщениями мгновенно, без новых HTTP-запросов. Задержка — десятки миллисекунд.
Почему для realtime выбирают Node.js
Node.js построен на событийной модели: один процесс не блокируется в ожидании ответа, а обрабатывает тысячи соединений одновременно. Поэтому один инстанс Node.js на сервере среднего уровня уверенно держит 10 000–50 000 одновременных WebSocket-подключений — точная цифра зависит от частоты и размера сообщений. Классическая модель «поток на каждое соединение» упирается в память на порядки раньше. Плюс фронтенд и бэкенд пишутся на одном языке JavaScript — не нужны два специалиста на один слой логики, а команда двигается быстрее. Готовые библиотеки Socket и ws закрывают типовые задачи: комнаты, автоматическое переподключение, фолбэк на long polling за строгими корпоративными прокси.Какие бизнес-задачи решает realtime на практике
- Чаты и переписка. Клиент—менеджер, покупатель—продавец на маркетплейсе, поддержка внутри личного кабинета.
- Уведомления о событиях. Новый заказ, оплата, смена статуса — менеджер видит событие сразу, а не после обновления страницы.
- Live-дашборды. Продажи, статусы курьеров, загрузка производства на экране в офисе обновляются в реальном времени.
- Живой e-commerce. Счётчик остатков, изменение цен, ставки на торгах — обновления без перезагрузки.
- Совместная работа. Двое сотрудников одновременно правят карточку в CRM и видят изменения друг друга.
Как это устроено на практике: Node.js + Socket.IO + Redis
Типовая архитектура выглядит так. Клиент открывает WebSocket-соединение через Socket.IO и при подключении передаёт JWT-токен: сервер проверяет личность и записывает сокет в «комнату» — например, привязанную к ID заказа или диалога. Когда происходит событие — покупатель написал сообщение или в 1С изменился остаток товара — бэкенд отправляет сообщение только в нужную комнату, а не всем подключённым. Если сервис растёт и поднимается несколько инстансов Node.js за балансировщиком, связующим звеном становится Redis Pub/Sub: событие, пришедшее на один инстанс, доставляется клиентам на всех остальных. Для корпоративных сетей Socket.IO умеет фолбэк на long polling, а nginx настраивается со sticky-сессиями, чтобы соединение не «прыгало» между серверами.Нагрузка и бюджет: какие цифры закладывать
Соединение, которое просто открыто и молчит, стоит копейки: порядка 5–10 КБ оперативной памяти. 10 000 открытых вкладок — это около 100 МБ, то есть пустые соединения нагрузку почти не создают. Основной фактор затрат — интенсивность обмена сообщениями: чат на 50 активных пользователей нагружает сервер сильнее, чем 5 000 молчащих вкладок. На старте большинству сервисов хватает VPS за 3–5 тыс. рублей в месяц, и этого объёма хватает на годы роста. Разработка MVP realtime-модуля — чат плюс уведомления в существующее приложение — обычно занимает 2–4 недели работы команды при готовом API.Безопасность realtime: чек-лист перед запуском
Realtime-канал — это постоянное соединение с сервером, и относиться к нему нужно строже, чем к обычным HTTP-запросам:- Только WSS (WebSocket поверх TLS): открытый ws:// — это перехват переписки в публичных сетях.
- Авторизация на этапе подключения: JWT или сессия проверяется при рукопожатии, права доступа — на входе в каждую комнату.
- Ограничение частоты (rate limiting) на соединение и на пользователя — защита от флуда и ботов.
- Валидация каждого сообщения на сервере: клиенту нельзя верить, даже «своему» фронтенду.
- Переподключение с нарастающей задержкой и очередь недоставленных сообщений, чтобы ничего не терялось при обрыве связи.
- Heartbeat (ping/pong) для выявления «мёртвых» соединений и корректного освобождения памяти.
Когда WebSocket избыточен
Честный подрядчик скажет прямо: realtime нужен не всегда. Если данные меняются раз в несколько минут — отчёты, каталог, карточки товаров — достаточно обновления по таймеру или SSE: это дешевле и в разработке, и в сопровождении. Realtime окупается там, где задержка стоит денег: переговоры с клиентом, тендеры и аукционы, мониторинг склада и логистики, совместная работа команды. Перед стартом зафиксируйте с разработчиками требование к «свежести» данных: если пользователю достаточно обновления раз в 30 секунд, вы сэкономите и бюджет, и время запуска.WebSocket и Node.js — зрелый, отработанный стек, на котором работают и стартапы, и крупные маркетплейсы. Реалистичный план внедрения для большинства бизнесов такой: начать с одного модуля — realtime-уведомлений или чата, замерить влияние на скорость реакции менеджеров и конверсию, а затем расширяться до дашбордов и совместного редактирования. Если хотите, чтобы ваш сайт или личный кабинет заработал в реальном времени — напишите нам: разберём задачу, посчитаем нагрузку и предложим архитектуру под ваш бюджет.

