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 |
| Максимум соединений на пользователя | 200 | WEBSOCKET_LIMIT_CONN |
Рекомендации
-
Переподключение: При разрыве соединения реализуйте автоматическое переподключение с экспоненциальной задержкой (1с, 2с, 4с, 8с, макс 30с).
-
Подписки: Восстанавливайте подписки после переподключения.
-
Обработка ошибок: Логируйте все ошибки и коды закрытия для диагностики.
-
Heartbeat: Отправляйте
{"method": "ping", "id": <id>}чаще чем раз в 60 секунд, иначе сервер закроет соединение.
