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 | Сессия истекла |