Перейти к основному содержимому

WebSocket подключение

Обзор

WebSocket используется для получения real-time уведомлений о новых сообщениях и событиях.

Подключение

URL

wss://api.smaiwer.ru/api/client/ws

Требования

  • Активная сессия (cookie client_session_token)
  • Поддержка WebSocket в браузере/клиенте

Пример (JavaScript)

const ws = new WebSocket('wss://api.smaiwer.ru/api/client/ws');

ws.onopen = () => {
console.log('Connected to SMAIWER WebSocket');
};

ws.onmessage = (event) => {
const data = JSON.parse(event.data);
handleEvent(data);
};

ws.onclose = () => {
console.log('Disconnected');
// Реализуйте переподключение
};

ws.onerror = (error) => {
console.error('WebSocket error:', error);
};

Переподключение

Рекомендуется реализовать автоматическое переподключение:

class SmaiwerWebSocket {
constructor(url) {
this.url = url;
this.reconnectAttempts = 0;
this.maxReconnectAttempts = 5;
this.reconnectDelay = 1000;
this.connect();
}

connect() {
this.ws = new WebSocket(this.url);

this.ws.onopen = () => {
console.log('Connected');
this.reconnectAttempts = 0;
};

this.ws.onclose = () => {
this.reconnect();
};

this.ws.onmessage = (event) => {
this.handleMessage(JSON.parse(event.data));
};
}

reconnect() {
if (this.reconnectAttempts < this.maxReconnectAttempts) {
this.reconnectAttempts++;
const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
console.log(`Reconnecting in ${delay}ms...`);
setTimeout(() => this.connect(), delay);
}
}

handleMessage(data) {
// Обработка событий
}
}

Heartbeat

Сервер отправляет ping каждые 30 секунд. Клиент должен отвечать pong:

ws.onmessage = (event) => {
if (event.data === 'ping') {
ws.send('pong');
return;
}
// Обработка других сообщений
};

Закрытие соединения

// Корректное закрытие
ws.close(1000, 'User logout');

Коды закрытия

КодОписание
1000Нормальное закрытие
1001Сервер выключается
1006Аварийное отключение
4001Не авторизован
4002Сессия истекла