Основой работы со STOMP.js является создание и настройка клиента,
через который осуществляется подключение к брокеру сообщений. Поведение
клиента полностью определяется набором параметров конфигурации, влияющих
на транспорт, повторные подключения, обработку ошибок, heartbeat и
форматирование кадров.
Конфигурация передаётся при создании экземпляра клиента и определяет
его жизненный цикл. В современных версиях STOMP.js используется объект с
полями, которые управляют как транспортным уровнем (WebSocket), так и
логикой протокола STOMP.
Ключевые группы параметров:
- параметры подключения
- параметры протокола STOMP
- параметры устойчивости соединения
- параметры отладки и обработки событий
brokerURL и webSocketFactory
brokerURL
brokerURL задаёт адрес STOMP-брокера через WebSocket.
Это основной способ подключения, когда WebSocket создаётся автоматически
библиотекой.
Пример логики:
ws:// или wss:// для защищённого
соединения
- адрес напрямую указывает на endpoint брокера
Поведение:
- если указан
brokerURL, библиотека самостоятельно
создаёт WebSocket
- используется в стандартных сценариях без кастомной логики
транспорта
webSocketFactory
webSocketFactory заменяет автоматическое создание
WebSocket на пользовательскую реализацию.
Используется, когда:
- требуется авторизация на уровне сокета
- нужен SockJS вместо WebSocket
- требуется проксирование или кастомные заголовки
Функция должна возвращать объект WebSocket-подобного интерфейса.
Ключевой момент:
- при наличии
webSocketFactory параметр
brokerURL игнорируется
connectHeaders определяет заголовки, отправляемые в
момент STOMP-команды CONNECT.
Типичные данные:
login
passcode
authorization
- кастомные метаданные клиента
Особенности:
- отправляются один раз при установке соединения
- могут быть динамически изменены перед реконнектом
- часто используются для JWT-токенов
Важно учитывать:
- заголовки не шифруются, если используется
ws://
- чувствительные данные требуют
wss://
reconnectDelay
reconnectDelay управляет задержкой автоматического
переподключения после разрыва соединения.
Поведение:
- значение указывается в миллисекундах
0 отключает автоматический reconnect
- положительное значение включает стратегию повторных попыток
Типичная логика:
- при потере соединения клиент ждёт указанное время
- затем инициирует новое подключение
Дополнительный аспект:
- повторные подключения не блокируют основной поток
- состояние клиента сохраняется между попытками
heartbeatIncoming и
heartbeatOutgoing
Heartbeat реализует механизм контроля «живости» соединения на уровне
STOMP-протокола.
heartbeatOutgoing
Определяет интервал отправки heartbeat от клиента к серверу.
heartbeatIncoming
Ожидаемый интервал получения heartbeat от сервера.
Формат:
- значения в миллисекундах
[outgoing, incoming]
Пример логики:
[10000, 10000] означает обмен каждые 10 секунд
Поведение:
- при отсутствии heartbeat соединение считается мёртвым
- автоматически инициируется reconnect (если включён)
Технический нюанс:
- heartbeat работает поверх STOMP frame
\n
debug
debug задаёт функцию логирования внутренних событий
STOMP.js.
Назначение:
- трассировка соединений
- анализ кадров
- диагностика ошибок протокола
Формат:
debug: (msg) => console.log(msg)
Особенности:
- вызывается часто, включая низкоуровневые события
- может существенно влиять на производительность
- обычно отключается в production
reconnectDelayJitter
(в расширенных реализациях)
Некоторые реализации добавляют случайную задержку к reconnect.
Назначение:
- предотвращение «шторма переподключений»
- распределение нагрузки на брокер
Поведение:
- добавляется случайное значение к
reconnectDelay
- снижает синхронные попытки соединения множества клиентов
beforeConnect
beforeConnect — функция-хук, выполняемая перед каждой
попыткой подключения.
Используется для:
- обновления токенов
- динамической подготовки заголовков
- асинхронных проверок состояния
Особенность:
- может быть async
- блокирует начало подключения до завершения выполнения
Пример поведения:
- обновление JWT перед reconnect
- проверка валидности сессии
onConnect
onConnect вызывается после успешного установления
STOMP-соединения.
Функциональность:
- регистрация подписок
- инициализация состояния приложения
- запуск обмена сообщениями
Срабатывает:
- после handshake WebSocket
- после успешного STOMP
CONNECTED
Важно:
- вызывается при каждом reconnect
- не только при первом подключении
onStompError
Обработчик ошибок уровня STOMP-протокола.
Типичные случаи:
- отказ в авторизации
- некорректные заголовки CONNECT
- ошибки брокера
Сигнатура содержит:
- frame с заголовками ошибки
- текстовое описание проблемы
Поведение:
- соединение может быть закрыто
- зависит от политики брокера
onWebSocketError
Обработчик ошибок транспортного уровня WebSocket.
Отличие от STOMP-ошибок:
- не связан с протоколом STOMP
- относится к сетевым сбоям
Примеры:
- отказ соединения TCP
- сбой TLS
- разрыв канала
onDisconnect
Вызывается при штатном или аварийном разрыве соединения.
Используется для:
- очистки состояния подписок
- уведомления UI
- логирования причин отключения
Особенность:
- может вызываться до reconnect цикла
connectionTimeout
Определяет максимальное время ожидания установления соединения.
Поведение:
- если CONNECT не завершён за указанное время, соединение
прерывается
- инициируется ошибка подключения
Применение:
- защита от зависших соединений
- контроль медленных сетей
forceBinaryWS (в
некоторых реализациях)
Указывает использовать бинарный режим WebSocket, если доступен.
Назначение:
- оптимизация передачи больших сообщений
- уменьшение накладных расходов сериализации
appendMissingNULLonIncoming /
outgoing
Параметры контроля завершения STOMP-фреймов.
- outgoing: добавляет завершающий
NULL символ при
отправке
- incoming: ожидает и корректирует входящие сообщения
Назначение:
- соответствие спецификации STOMP 1.2
- предотвращение ошибок парсинга кадров
splitLargeFrames
Управляет разбиением больших сообщений на части.
Поведение:
- включение позволяет разделять крупные payload
- полезно при ограничениях брокера
Риски:
- увеличение накладных расходов
- необходимость корректной сборки на сервере
STOMP версия и
согласование протокола
Некоторые клиенты позволяют задавать версию STOMP через
конфигурацию.
Влияние:
- влияет на формат handshake
- определяет доступные команды и заголовки
- STOMP 1.0, 1.1, 1.2 имеют различия в heartbeat и заголовках
Поведение клиента
при изменении конфигурации
Конфигурация обычно применяется:
- до подключения
- не изменяется «на лету» без реконнекта
Изменение параметров после activate() требует:
deactivate()
- повторной инициализации клиента
Исключения:
- динамические headers (через hooks)
- debug можно менять в runtime
Взаимосвязь параметров
Некоторые параметры работают только совместно:
heartbeatIncoming/outgoing требует поддержки
сервера
reconnectDelay зависит от состояния
onDisconnect
beforeConnect влияет на
connectHeaders
webSocketFactory полностью заменяет
brokerURL
Конфигурация фактически формирует поведение клиента как конечного
автомата:
- подключение
- поддержание сессии
- восстановление
- обработка ошибок
Типичные конфигурационные
паттерны
- Базовое подключение:
- brokerURL + connectHeaders + onConnect
- Защищённое соединение:
- wss + токены в headers + heartbeat
- Устойчивый клиент:
- reconnectDelay + beforeConnect + onDisconnect
- Корпоративный сценарий:
- webSocketFactory + динамическая авторизация + строгий timeout