Протокол WebSocket
Yoyo Market (далее — Yoyo) предоставляет три WebSocket-эндпоинта для потоковой передачи данных в реальном времени. Все используют стандартный протокол WebSocket upgrade.
Эндпоинты
| Эндпоинт | Назначение | Аутентификация |
|---|---|---|
/api/v1/ws/trades | Лента сделок | Нет |
/api/v1/ws/events/{event_id}/chart | Обновления цен рынка | Нет |
/api/v1/ws/assets/{symbol}/price | Обновления цен криптоактивов | Нет |
Подключение
const ws = new WebSocket('wss://yoyo.market/api/v1/ws/trades');
ws.onopen = () => {
console.log('Connected to trades feed');
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log('New trade:', data);
};
ws.onclose = (event) => {
console.log('Disconnected:', event.code, event.reason);
};
Детали протокола
| Параметр | Значение |
|---|---|
| Интервал ping | 50 секунд (сервер отправляет ping) |
| Дедлайн чтения | 60 секунд (соединение закрывается без pong) |
| Макс. размер сообщения (сделки) | 512 байт |
| Макс. размер сообщения (графики/активы) | 128 байт |
| Макс. подключений на хаб | 10,000 |
Начальное сообщение
При подключении сервер отправляет init-сообщение с недавней историей.
Типы сообщений
- Сделки:
{"type": "trade", "trade": {...}} - Графики:
{"type": "chart_update", ...} - Цены активов:
{"type": "price_update", ...}
Переподключение
Реализуйте экспоненциальную задержку:
let reconnectDelay = 1000;
function connect() {
const ws = new WebSocket('wss://yoyo.market/api/v1/ws/trades');
ws.onopen = () => {
reconnectDelay = 1000;
};
ws.onclose = () => {
setTimeout(connect, reconnectDelay);
reconnectDelay = Math.min(reconnectDelay * 2, 30000);
};
ws.onmessage = (event) => {
handleMessage(JSON.parse(event.data));
};
}
connect();
Хабы
| Хаб | Область | Частота сообщений |
|---|---|---|
| Сделки | Глобальная | При каждой сделке |
| Графики | По событию | При изменении цены |
| Цены активов | По символу | Каждые несколько секунд |