← Назад к вопросам
Как происходит работа с WebSocket на Frontend?
2.0 Middle🔥 81 комментариев
#JavaScript Core#Браузер и сетевые технологии
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
WebSocket на Frontend
WebSocket - это протокол для двусторонней коммуникации между клиентом и сервером через одно TCP соединение. В отличие от HTTP, где клиент всегда инициирует запрос, WebSocket позволяет серверу отправлять данные клиенту без запроса.
Создание WebSocket соединения
const socket = new WebSocket('ws://localhost:8000/ws');
const secureSocket = new WebSocket('wss://example.com/ws');
События WebSocket
const socket = new WebSocket('ws://localhost:8000/chat');
socket.onopen = function(event) {
console.log('Соединение установлено');
socket.send(JSON.stringify({ type: 'init', userId: 123 }));
};
socket.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('Получено сообщение:', data);
updateUI(data);
};
socket.onerror = function(event) {
console.error('WebSocket ошибка:', event);
};
socket.onclose = function(event) {
console.log('Соединение закрыто');
};
Отправка данных
function sendMessage(message) {
if (socket.readyState === WebSocket.OPEN) {
socket.send(JSON.stringify({
type: 'message',
text: message,
timestamp: new Date()
}));
} else {
console.log('Соединение не готово');
}
}
readyState соединения
if (socket.readyState === WebSocket.OPEN) {
socket.send('Сообщение');
}
Пример чата с переподключением
class ChatManager {
constructor(url) {
this.url = url;
this.socket = null;
this.reconnectInterval = 3000;
this.messageHandlers = [];
}
connect() {
try {
this.socket = new WebSocket(this.url);
this.socket.onopen = () => {
console.log('Чат подключен');
this.notifyHandlers({ type: 'connected' });
};
this.socket.onmessage = (event) => {
const message = JSON.parse(event.data);
this.notifyHandlers(message);
};
this.socket.onerror = (error) => {
console.error('Ошибка чата:', error);
};
this.socket.onclose = () => {
setTimeout(() => this.connect(), this.reconnectInterval);
};
} catch (error) {
console.error('Ошибка подключения:', error);
}
}
sendMessage(text) {
if (this.socket && this.socket.readyState === WebSocket.OPEN) {
this.socket.send(JSON.stringify({
type: 'message',
text,
timestamp: new Date().toISOString()
}));
}
}
close() {
if (this.socket) {
this.socket.close();
}
}
}
Лучшие практики
- Всегда проверяй readyState перед отправкой
- Реализуй переподключение при потере соединения
- Используй heartbeat для отслеживания активного соединения
- Обрабатывай ошибки и закрытия соединения
- Закрывай соединение при размонтировании компонента