Обзор

WebSocket API позволяет получать рыночные данные в реальном времени и информацию о состоянии аккаунта без необходимости постоянных HTTP-запросов.

Эндпоинты подключения

Exchange WebSocket (Спот + Фьючерсы)

wss://hub.abcex.io/websocket/exchange

Используется для получения рыночных данных спотового и фьючерсного рынков, а также приватной информации пользователя.

P2P WebSocket

wss://hub.abcex.io/socket.io/?token={JWT_TOKEN}&EIO=4&transport=websocket

Используется для P2P торговли. Работает на протоколе Socket.IO v4.


Авторизация

Exchange WebSocket

Для доступа к приватным каналам (балансы, ордера, позиции) необходима авторизация. После установки соединения отправьте JWT токен первым сообщением:

{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}

Успешный ответ:

{"id":0,"userId":"87223898-214a-48cf-b83f-d9efea88a19b"}

Примечание: Публичные каналы (тикеры, стакан, сделки) доступны без авторизации.

P2P WebSocket

Токен передаётся в URL параметре token при подключении.


Поддержание соединения (Ping/Pong)

Exchange WebSocket

Механизм работает от клиента к серверу (не наоборот). Сервер запускает watchdog, который каждые 5 секунд проверяет, прошло ли больше PING_TIMEOUT (по умолчанию 60 секунд) с последнего ping от клиента. Если клиент не пингует вовремя — соединение закрывается с причиной "ping timeout".

Формат сообщений ping/pong см. в Формате сообщений.

P2P WebSocket (Socket.IO)

  • Сервер отправляет: 2
  • Клиент отвечает: 3

Стандартное поведение Socket.IO v4: heartbeat каждые 25 секунд, таймаут 20 секунд.


Коды ошибок

КодОписание
1000Нормальное закрытие соединения
1001Сервер завершает работу
1002Ошибка протокола
1003Неподдерживаемый тип данных
1006Неожиданное закрытие соединения
1008Нарушение политики (неверный токен)
1011Внутренняя ошибка сервера
4000Неверный формат сообщения
4001Неизвестный канал
4002Требуется авторизация
4003Недостаточно прав

Лимиты

ПараметрЗначениеEnv переменная
Максимум подписок на соединениеБез ограничений
Rate limit на сообщенияНет явного rate limit; send-канал буферизован на 100 сообщений — если заблокирован 5 сек, соединение закрывается
Таймаут неактивности (без ping)60 секундPING_TIMEOUT
Максимальный размер входящего сообщения4096 байтMAX_MSG_SIZE_BYTES
Максимум соединений на пользователя200WEBSOCKET_LIMIT_CONN

Рекомендации

  1. Переподключение: При разрыве соединения реализуйте автоматическое переподключение с экспоненциальной задержкой (1с, 2с, 4с, 8с, макс 30с).

  2. Подписки: Восстанавливайте подписки после переподключения.

  3. Обработка ошибок: Логируйте все ошибки и коды закрытия для диагностики.

  4. Heartbeat: Отправляйте {"method": "ping", "id": <id>} чаще чем раз в 60 секунд, иначе сервер закроет соединение.