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

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

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

Часті запитання

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1460
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1165

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

Чому не polling?

Замість того щоб браузер кожні N секунд питати "чи є нові дані?", WebSocket тримає одне постійне з'єднання. При 100 одночасних користувачах та інтервалі 5 секунд polling створює 20 запитів на секунду — більшість порожніх. WebSocket надсилає дані тільки коли вони з'являються, знижуючи навантаження на сервер у 10-15 разів, що економить до $200-500 на місяць на хостингу. Long polling — компроміс, але WebSocket масштабується краще в 5 разів та споживає менше пам'яті. На практиці 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 краще за Ratchet у 10 разів за кількістю з'єднань, а Node.js краще за Ratchet у 20 разів. Centrifugo підходить для швидкого старту: готовий сервер з авторизацією каналів, історією повідомлень та масштабуванням. Ви отримуєте production-ready рішення за пару днів, але менше гнучкості — потрібно адаптуватися до API. Ratchet, навпаки, дає повний контроль: ви пишете логіку з'єднань на PHP, інтегруєтеся напряму з Бітрікс. Мінус — доведеться реалізовувати авторизацію та обробку помилок вручну. Node.js + Socket.io — для високонавантажених проектів з тисячами з'єднань. Це окремий стек, інтеграція через Redis pub/sub, але продуктивність вища в 2-3 рази порівняно з Ratchet.

Для типового інтернет-магазину на 200 замовлень на день достатньо Centrifugo. Якщо потрібен складний чат з історією та модерацією — обираємо Node.js. При обмеженому бюджеті та повній кастомізації — Ratchet. Досвід показує, що правильний вибір знижує вартість володіння на 40%. Наші рішення пройшли 30+ успішних впроваджень, і ми гарантуємо стабільність з'єднань та підтримку 24/7. Ми — команда з понад 7-річним досвідом у вебсокетах для Бітрікс.

Архітектура з 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, який використовує асинхронний I/O через ReactPHP. Запускається як 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. Отримайте консультацію нашого інженера — допоможемо спроектувати архітектуру.

Часті питання

Які технології WebSocket ви використовуєте для 1С-Бітрікс?Ми пропонуємо Centrifugo (рекомендуємо для швидкого запуску), Ratchet (для глибокої кастомізації) або Node.js + Socket.io. Вибір залежить від навантаження, необхідної кастомізації та інфраструктури клієнта. За досвідом, Centrifugo дає готовий production-ready сервер з авторизацією каналів та масштабуванням.
Скільки часу займає впровадження WebSocket в Бітрікс?Базовий сценарій (сповіщення менеджерам) — близько 2 тижнів під ключ. Якщо потрібен онлайн-чат або оновлення залишків — від 3 до 5 тижнів. Терміни включають вибір технології, інтеграцію, розробку frontend-клієнта та деплой з налаштуванням моніторингу.
Чи потрібно змінювати інфраструктуру сервера?Потрібен long-running процес (не FPM). Ми налаштовуємо Supervisor для автоперезапуску та Nginx для проксіювання WebSocket. Якщо використовуються кілька серверів, додаємо Redis pub/sub як шину. Все це типові рішення — не потрібно змінювати архітектуру кардинально.
Які сценарії real-time найбільш затребувані?За нашими проектами найчастіше замовляють: миттєві сповіщення менеджера про нове замовлення (toast без перезавантаження), онлайн-чат між покупцем та оператором, оновлення залишків у кошику при зміні на складі та статус замовлення для клієнта в реальному часі.
Що робити, якщо клієнт використовує коробковий Бітрікс, а не хмарний?Для коробкового Бітрікс ми реалізуємо кастомний WebSocket-сервер, оскільки стандартний чат Бітрікс24 недоступний. Підключаємося через Redis pub/sub та авторизуємо канали за JWT. Рішення повністю кастомізується під бізнес-логіку.