Ответ
WebSocket — это протокол связи поверх TCP, обеспечивающий постоянное двунаправленное соединение между клиентом (например, браузером) и сервером.
Основное назначение: Реализация интерактивного обмена данными в реальном времени без необходимости постоянных HTTP-запросов (polling).
Типичные сценарии использования:
- Онлайн-чаты и уведомления
- Многопользовательские онлайн-игры
- Биржевые тикеры и финансовые дашборды
- Совместные редакторы и инструменты
Ключевые преимущества перед HTTP:
- Низкая задержка: После рукопожатия (handshake) данные передаются по уже установленному соединению.
- Эффективность: Отсутствуют накладные расходы на заголовки HTTP при каждом сообщении.
- Двунаправленность: Сервер может отправлять данные клиенту в любой момент без ожидания запроса.
Пример установки соединения и обмена сообщениями в JavaScript:
// Создание WebSocket-соединения
const socket = new WebSocket('wss://api.example.com/ws');
// Обработчик входящих сообщений
socket.onmessage = function(event) {
console.log('Сообщение от сервера:', event.data);
};
// Отправка данных на сервер
socket.send(JSON.stringify({ type: 'greeting', text: 'Hello' }));
Протокол начинается с HTTP-совместимого рукопожатия (Upgrade: websocket), после чего переходит на бинарный или текстовый фреймовый обмен.