Skip to content
EN

Что такое WebSocket

Коротко:

WebSocket (RFC 6455) — протокол поверх TCP, обеспечивающий full-duplex bidirectional коммуникацию между браузером и сервером. В отличие от HTTP, соединение остаётся открытым, сервер может push без запроса. Использование: real-time chat, live notifications, multiplayer games, collaborative editing. Handshake через HTTP Upgrade header → переход на ws:// или wss://.

Ниже: подробности, пример, смежные термины, FAQ.

Проверить свой сайт →

Подробности

  • Handshake: HTTP GET с Upgrade: websocket + Connection: Upgrade
  • Protocol: ws:// (plaintext), wss:// (TLS, mandatory в production)
  • Frames: binary или UTF-8 text. Max frame 2^63 bytes (rarely hit)
  • Heartbeat: ping/pong frames для keep-alive
  • Alternative: Server-Sent Events (SSE) для server→client only

Пример

const ws = new WebSocket('wss://example.com/socket');
ws.onmessage = e => console.log(e.data);
ws.onopen = () => ws.send(JSON.stringify({ type: 'subscribe' }));

Смежные термины

Что такое WebSocket?

WebSocket — это протокол, обеспечивающий двустороннюю связь между клиентом и сервером в реальном времени. Он позволяет обмениваться данными без необходимости многократного установления соединений, что значительно снижает задержки и увеличивает скорость передачи данных. WebSocket работает по принципу постоянного соединения, где клиент и сервер могут отправлять сообщения в любой момент, что делает его идеальным для приложений, требующих мгновенной передачи данных, таких как чаты, игры и финансовые приложения.

Как работает WebSocket?

Протокол WebSocket начинается с этапа установки соединения через HTTP-запрос с использованием специального заголовка Upgrade. После успешного установления соединения, клиент и сервер могут обмениваться данными в формате текстовых или бинарных сообщений. Синтаксис WebSocket включает в себя команды для отправки и получения сообщений, а также для закрытия соединения.

Пример установки WebSocket-соединения:

const socket = new WebSocket('ws://example.com/socket');

После этого вы можете обрабатывать события, такие как onopen, onmessage и onclose:

socket.onopen = function(event) { console.log('Соединение установлено!'); };
socket.onmessage = function(event) { console.log('Сообщение от сервера: ', event.data); };
socket.onclose = function(event) { console.log('Соединение закрыто'); };

WebSocket поддерживает несколько основных команд:

  • CONNECT — устанавливает соединение;
  • SEND — отправляет сообщение;
  • RECEIVE — получает сообщение;
  • CLOSE — закрывает соединение.

Применение WebSocket в реальных проектах

WebSocket находит широкое применение в таких областях, как онлайн-игры, финансовые платформы и системы обмена сообщениями. Например, в приложении для онлайн-торговли WebSocket может использоваться для получения актуальных котировок и цен на акции в реальном времени. При этом сервер может отправлять обновления клиентам мгновенно, что критически важно для трейдеров.

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

const socket = new WebSocket('wss://stock.example.com/prices');
socket.onmessage = function(event) {
    const stockData = JSON.parse(event.data);
    console.log(`Цена акций ${stockData.symbol}: ${stockData.price}`);
};

Здесь мы устанавливаем соединение с сервером, который передает данные о ценах акций в формате JSON. Как только сервер отправляет обновление, мы обрабатываем его в функции onmessage и выводим цену в консоль.

Кроме того, WebSocket может использоваться для создания приложений с высокой интерактивностью, таких как онлайн-игры, где требуется обмен данными между игроками и сервером в реальном времени. Это позволяет игрокам взаимодействовать друг с другом практически без задержек, что значительно улучшает игровой процесс.

Важным аспектом использования WebSocket является обеспечение безопасности соединений. Рекомендуется использовать защищенные соединения wss:// для предотвращения перехвата данных. Также стоит учитывать, что WebSocket-соединения могут быть более уязвимыми к атакам, поэтому важно применять дополнительные меры безопасности, такие как аутентификация и авторизация.

Больше по теме

Часто задаваемые вопросы

WebSocket или SSE?

WebSocket — bidirectional (сервер и клиент обе шлют). SSE — одноcторонние (только server→client). SSE проще и работает через HTTP, WebSocket быстрее.

Как обрабатывать disconnect?

Implement reconnect с exponential backoff. Socket.IO делает это автоматически.

Масштабирование?

Один Node.js handles 10k+ concurrent WebSockets. Для 100k+ — Redis pub/sub между instances или managed service (Ably, Pusher).

Запустить инструмент, который описан в этой статье

Бесплатный тариф — 10 мониторов, проверки каждые 5 мин, без карты. Платные тарифы — интервал от 1 минуты и проверки из нескольких регионов.