Разработка WebSocket-сервиса для 1С-Битрикс и Битрикс24

В нашей практике типовой интернет-магазин на Битрикс обновляет остатки в корзине с запаздыванием 2-5 секунд. Покупатель добавляет товар, а система ещё не пересчитала доступность. Через час приходит письмо: «товара нет в наличии». **WebSocket** решает эту проблему, поддерживая постоянное соединение и
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка WebSocket-сервиса для 1С-Битрикс и Битрикс24
Средний
~1-2 недели

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1164

В нашей практике типовой интернет-магазин на Битрикс обновляет остатки в корзине с запаздыванием 2-5 секунд. Покупатель добавляет товар, а система ещё не пересчитала доступность. Через час приходит письмо: «товара нет в наличии». WebSocket решает эту проблему, поддерживая постоянное соединение и доставляя данные мгновенно. Push-уведомления для интернет-магазина — один из ключевых сценариев, который мы реализуем. WebSocket — стандарт двунаправленной связи (Wikipedia). Мы предлагаем выбрать правильную архитектуру: Centrifugo, Ratchet или Node.js. Разберём, что и когда выбрать, и как интегрировать без головной боли.

Почему не polling?

Вместо того чтобы браузер каждые N секунд спрашивать "есть ли новые данные?", WebSocket держит одно постоянное соединение. При 100 одновременных пользователях и интервале 5 секунд polling создаёт 20 запросов в секунду — большинство пустых. WebSocket отправляет данные только когда они появляются, снижая нагрузку на сервер в 10-15 раз и экономя до 40% серверных ресурсов. Long polling — компромисс, но хуже масштабируется и потребляет больше памяти. На практике WebSocket обрабатывает до 10 000 одновременных соединений на одном сервере без потери производительности.

Какой WebSocket-сервер выбрать для Битрикс?

Выбор стека определяет скорость разработки и стоимость поддержки. Ниже — сравнение трёх подходов без маркетинговых обещаний.

Сравнение технологий

Критерий Centrifugo Ratchet Node.js + Socket.io
Готовность к продакшену Высокая (из коробки) Средняя (требуется доработка) Высокая (экосистема готова)
Гибкость кастомизации Низкая (через API) Высокая (полный контроль) Средняя (экосистема)
Производительность (соединений) ~50 000 ~5 000 ~100 000
Сложность интеграции Низкая (2-3 дня) Средняя (1-2 недели) Средняя (1-2 недели)
Поддержка PHP Через HTTP API Напрямую (PHP) Через Redis

Centrifugo подходит для быстрого старта: готовый сервер с авторизацией каналов, историей сообщений и масштабированием. Вы получаете production-ready решение за пару дней, но меньше гибкости — нужно адаптироваться к API. Ratchet, наоборот, даёт полный контроль: вы пишете логику соединений на PHP, интегрируетесь напрямую с Битрикс. Минус — придётся реализовывать авторизацию и обработку ошибок вручную. Node.js + Socket.io — для высоконагруженных проектов с тысячами соединений. Это отдельный стек, интеграция через Redis pub/sub, но производительность выше в 2-3 раза по сравнению с Ratchet.

Для типового интернет-магазина на 200 заказов в день достаточно Centrifugo. Если нужен сложный чат с историей и модерацией — выбираем Node.js. При ограниченном бюджете и полной кастомизации — Ratchet. Опыт показывает, что правильный выбор снижает стоимость владения на 40%.

Архитектура с Centrifugo

Centrifugo — отдельный сервис, Битрикс взаимодействует с ним через HTTP API:

Браузер ←→ WebSocket ←→ Centrifugo ←→ Redis ↑ Битрикс публикует события 

При событии в Битрикс (новый заказ, изменение статуса) — PHP-код публикует в канал Centrifugo:

$centrifugo = new CentrifugoClient('http://centrifugo:8000', $apiKey); $centrifugo->publish('orders:' . $managerId, [ 'event' => 'new_order', 'order_id' => $orderId, 'customer' => $customerName, 'amount' => $amount, ]); 

Браузер, подписанный на канал orders:{managerId}, мгновенно получает событие. Авторизация каналов через JWT — Centrifugo проверяет права через эндпоинт Битрикс.

Архитектура с Ratchet

Для более тесной интеграции — собственный WebSocket-сервер на Ratchet. Запускается как daemon:

php /local/cli/websocket_server.php 
// websocket_server.php use Ratchet\Server\IoServer; use Ratchet\Http\HttpServer; use Ratchet\WebSocket\WsServer; $server = IoServer::factory( new HttpServer( new WsServer( new BitrixWebSocketHandler() ) ), 8080 ); $server->run(); 

BitrixWebSocketHandler реализует \Ratchet\MessageComponentInterface:

  • onOpen — новое соединение, авторизация
  • onMessage — сообщение от клиента
  • onClose — закрытие
  • onError — ошибка

Хранение соединений: SplObjectStorage с привязкой user_id → connection. Связь с Битрикс через Redis pub/sub — Битрикс публикует, Ratchet читает и рассылает.

Как интегрировать WebSocket с Битрикс?

Интеграция состоит из нескольких шагов. Разберём на примере Centrifugo — самого частого выбора.

  1. Установка и настройка Centrifugo. Запускаем Docker-контейнер, указываем API-ключ и секрет для JWT.
  2. Настройка авторизации. В Битрикс создаём эндпоинт, который возвращает JWT-токен для текущего пользователя. Centrifugo проверяет токен при каждом подключении.
  3. Публикация событий. В обработчиках событий Битрикс (например, OnOrderAdd) вызываем HTTP API Centrifugo для публикации в нужный канал.
  4. Frontend-клиент. Подключаемся по WebSocket, передаём токен, подписываемся на каналы и обрабатываем сообщения.
  5. Деплой с Supervisor и Nginx. Обеспечиваем автозапуск и проксирование.

Frontend: подключение к WebSocket

const ws = new WebSocket('wss://example.com:8080'); ws.onopen = () => { ws.send(JSON.stringify({ type: 'auth', token: userJwt })); }; ws.onmessage = (event) => { const data = JSON.parse(event.data); if (data.event === 'new_order') { showNotification(`Новый заказ #${data.order_id} на ${data.amount} $`); } }; ws.onclose = () => { setTimeout(() => connectWebSocket(), 3000); }; 

Переподключение с exponential backoff — обязательно. Мобильные сети нестабильны.

Что входит в работу

  • Анализ сценариев и выбор технологии
  • Настройка WebSocket-сервера (Centrifugo/Ratchet/Node.js)
  • Интеграция с Битрикс через Redis pub/sub
  • Разработка frontend-клиента (JS, авторизация, переподключение)
  • Деплой с Supervisor и Nginx
  • Мониторинг метрик соединений
  • Документация по архитектуре и поддержке

Этапы разработки

Этап Содержание Срок
Выбор технологии Centrifugo vs Ratchet vs Node.js, оценка инфраструктуры 2–3 дня
WebSocket-сервер Базовая инфраструктура, авторизация 1 неделя
Интеграция с Битрикс Redis pub/sub, публикация событий из PHP 3–5 дней
Frontend-клиент JS-клиент, переподключение, обработка событий 3–5 дней
Конкретные сценарии Уведомления, чат, обновление данных 1–2 недели
Деплой и мониторинг Supervisor, Nginx, метрики соединений 3–5 дней

Когда WebSocket оправдан?

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

Для ускорения выбора: если у вас до 1000 одновременных соединений и типовые сценарии (уведомления, обновление корзины) — выбирайте Centrifugo. Если нужен кастомный протокол или интеграция с PHP-логикой — Ratchet. Для масштабных чатов и коллабораций — Node.js. Получите консультацию нашего инженера — поможем спроектировать архитектуру.