Вопрос проверяет понимание протокола WebSocket, его механизма работы и ключевых отличий от HTTP, что важно для разработки приложений реального времени.
WebSocket — это протокол, предоставляющий полнодуплексный (full-duplex) канал связи поверх одного TCP-соединения. Он предназначен для преодоления ограничений HTTP, который изначально не был рассчитан на постоянный обмен сообщениями.
Соединение начинается с "рукопожатия" (handshake) через HTTP. Клиент отправляет специальный HTTP-запрос с заголовком Upgrade: websocket. Если сервер поддерживает WebSocket, он отвечает подтверждением, после чего протокол переключается с HTTP на WebSocket. С этого момента соединение остаётся открытым, и обе стороны могут отправлять данные независимо друг от друга.
Ниже показан базовый пример использования WebSocket API в браузере.
// Создание соединения
const socket = new WebSocket('wss://echo.websocket.org');
// Обработчик открытия соединения
socket.onopen = function(event) {
console.log('Соединение установлено');
socket.send('Привет, сервер!'); // Отправка сообщения
};
// Обработчик входящих сообщений
socket.onmessage = function(event) {
console.log('Получено от сервера:', event.data);
};
// Обработчик ошибок
socket.onerror = function(error) {
console.error('Ошибка WebSocket:', error);
};
// Обработчик закрытия соединения
socket.onclose = function(event) {
console.log('Соединение закрыто');
};
// Закрытие соединения через 10 секунд
setTimeout(() => socket.close(), 10000);WebSocket идеально подходит для приложений, требующих низкой задержки и постоянного обмена данными: онлайн-чаты, уведомления в реальном времени, многопользовательские игры, торговые платформы с live-котировками, совместные редакторы и инструменты мониторинга.
Вывод: Используйте WebSocket, когда ваше приложение требует постоянного двунаправленного обмена сообщениями с минимальной задержкой, а модель HTTP запрос-ответ становится неэффективной.