WebSocket (WSS): что это такое и как работает протокол
Есть приложения и сервисы, которым нужно обмениваться данными в реальном времени без задержек и излишней нагрузки на сервер. Традиционный HTTP-протокол решить эту задачу не может, поэтому на помощь приходит WebSocket. Он создает соединение между клиентским браузером и сервером, не требуя новых запросов для каждого действия. Из статьи узнаете, как работает WebSocket и чем он уникален.

Что такое WebSocket
WebSocket (веб-сокет) — сетевой протокол передачи данных, который обеспечивает постоянное двустороннее (full-duplex) соединение между клиентом и сервером. Его главная особенность — поддержка актуальности этого соединения без новых запросов от клиента.
WebSocket появился в качестве решения, призванного нивелировать ограничения HTTP, работа которого строится по принципу «запрос-ответ». Клиент отправляет запрос, а сервер отправляет в ответ запрашиваемую страницу. Затем соединение закрывается. Для статического контента, например, блогов, одностраничников и справочников это оптимально. Для получения обновленных данных — нет, поскольку каждый раз приходится отправлять запросы.
Для работы с динамическим контентом стала применяться техника AJAX. Это не самостоятельная технология, а подход к взаимодействию между клиентом и сервером. Он позволяет присылать клиенту только обновленные данные, без необходимости полной перезагрузки страницы. Например, когда пользователь фильтрует товары в интернет-магазине, нужные данные автоматически подгружаются с сервера с помощью AJAX.
Но и AJAX не решила проблему постоянного обмена данными. Тогда началась разработка WebSocket. Ian Hickson, инженер Google, предложил этот протокол в качестве решения для веб-приложений, требующих постоянного и оперативного обмена данными в реальном времени. В 2011 году WebSocket официально стандартизировали как RFC 6455 и интегрирован в браузеры — Google Chrome, Mozilla Firefox, Safari и Microsoft Edge. Это стало началом массового распространения технологии среди разработчиков веб-приложений.
Как работает протокол
Разберем принцип работы технологии со схемами и примерами.
Принципы работы WebSocket
WebSocket позволяет установить постоянный канал связи, через который можно в реальном времени обмениваться данными. В процессе работы WebSocket соединение остается открытым. Сервер может отправлять новые данные, не ожидая запросов от клиента. Аналогично и клиент может в любой момент отправлять данные на сервер, не инициируя каждый раз новое соединение.

Принцип работы WebSocketУстановление соединения и двусторонняя связь
Не будем погружаться в нюансы и коротко опишем схему работы технологии:
Websocket-handshake. Проще говоря, «рукопожатие» клиента и сервера. Клиент отправляет HTTP-запрос, но с заголовком Upgrade, который сообщает о намерении перейти на Websocket. Таким образом клиент и сервер согласовывают дальнейшие правила для создания двустороннего постоянного соединения.
Обмен данными. Если «рукопожатие» прошло успешно, устанавливается постоянное двустороннее соединение. Теперь клиент и сервер могут обмениваться данными без отправки новых запросов.
Закрытие соединения. Когда необходимость в обмене данными исчезает, сеанс прекращается.
Как устанавливается соединениеДля большего понимания сравним WebSocket с разводным мостом. Пока мост разведен, машины не могут добраться с одного конца города на другой. Затем мост смыкается, и ответственные лица дают одобрение на движение автомобилей. Машины начинают двигаться и двигаются до тех пор, пока мост снова не разведут. Также и с соединением по протоколу WebSocket — пока оно активно, клиент и сервер могут в двустороннем порядке обмениваться данными.
WebSocket и HTTP: различия и взаимодействие
WebSocket и HTTP — протоколы, которые используются для обмена данными между клиентом и сервером. Оба играют важную роль в веб-разработке, но назначение и принцип работы различаются. Отличия представлены в таблице.
Критерий | HTTP | WebSocket |
Тип соединения | Одноразовое, запрос-ответ (request-response) | Двустороннее соединение (full-duplex) |
Установка соединения | Каждый запрос требует нового соединения | Соединение устанавливается один раз и поддерживается |
Используемая модель | Клиент-сервер, однонаправленное соединение | Двустороннее соединение, где клиент и сервер могут отправлять данные |
Процесс обмена данными | Запрос клиента — ответ сервера | Поток данных, который остается открытым (динамичное соединение) |
Использование | Подходит для загрузки веб-страниц, запросов API и т.д. | Идеально для реального времени (чат, игры, финансовые приложения) |
Совместимость с браузерами | Поддерживается всеми современными браузерами | Поддерживается большинством браузеров, но требует API WebSocket |
Технические ограничения | Высокие накладные расходы из-за установления нового соединения для каждого запроса | Менее нагружен благодаря открытому соединению |
Еще раз напомним, как работает HTTP. Это протокол с клиент-серверной моделью. Клиент отправляет запрос на сервер, сервер отвечает. При каждом запросе инициируется новое соединение, которое после ответа закрывается. Такой принцип работы подходит для обычных веб-страниц и работы с динамическим контентом.
WebSocket устанавливает постоянное соединение между клиентом и сервером и позволяет обмениваться данными в реальном времени. Благодаря такому принципу работы WebSocket подходит для приложений, требующих постоянной связи и обмена данными — чатов, онлайн-игр, финансовых платформ.

HTTP и WebSocket часто работают в связке. Приложение может сначала применять HTTP, например, для аутентификации клиента или получения начальной страницы. После установления соединения через HTTP в дело вступает WebSocket. Он поможет организовать постоянный канал для передачи данных в реальном времени.
Преимущества и недостатки WebSocket
Нет универсальных технологий, и WebSocket — не исключение. У протокола много преимуществ, благодаря которым он набирает популярность. Однако минусы тоже есть, и их нужно учитывать.
Преимущества
Сильные стороны WebSocket:
Минимальные задержки. WebSocket обеспечивает быструю передачу данных между сервером и клиентом. Поэтому протокол — идеальный выбор для приложений, где задержки критичны. Например, таких, как онлайн-игры, чаты и финансовые платформы.
Двусторонняя связь. В отличие от HTTP, где клиент инициирует запрос, WebSocket позволяет как клиенту, так и серверу отправлять данные в любой момент. Это обеспечивает двусторонний обмен данными.
Поддержка постоянного соединения. После установки соединения WebSocket остается активным. Это обеспечивает экономию ресурсов и снижение нагрузки, поскольку не нужно каждый раз открывать новое соединение, как это происходит в HTTP.
Эффективное использование ресурсов. WebSocket использует гораздо меньше ресурсов по сравнению с традиционным HTTP, поскольку соединение остается открытым, и данные передаются по мере необходимости.
Подходит для масштабируемых приложений. WebSocket масштабируется для приложений с большим потоком пользователей, так как сервер может поддерживать тысячи открытых соединений одновременно.
Экономия трафика. В отличие от HTTP, где каждый запрос требует полного обмена заголовками, WebSocket отправляет только необходимые данные. Это сокращает объем передаваемой информации.
Недостатки WebSocket
У WebSocket есть ограничения. Для удобства мы собрали их в таблицу.
Недостаток | Описание |
Поддержка браузеров | Не все старые браузеры поддерживают WebSocket, из-за чего нужны дополнительные усилия для обеспечения совместимости |
Необходимость постоянного подключения | WebSocket требует постоянного открытого соединения, что может создавать нагрузку на сервер и требовать больше ресурсов для поддержания множества активных сеансов |
Сложности с масштабируемостью | Масштабирование серверов с множеством активных соединений может быть сложным. Важны балансировка нагрузки и грамотное управление соединениями для высоконагруженных систем |
Проблемы с прокси и фаерволами | Некоторые прокси-серверы и файрволы могут блокировать или не поддерживать WebSocket, из-за чего бывают проблемы с подключением в защищенных или корпоративных сетях |
Безопасность | Несмотря на поддержку защищенных соединений (wss://), WebSocket иногда становится целью атак. Чтобы минимизировать риски, нужно настраивать механизмы защиты |
Управление множеством соединений | При большом количестве соединений производительность может снизиться из-за нагрузки на сервер |
Ограниченная поддержка для больших данных | Основные сложности с передачей больших файлов по WebSocket — это отсутствие встроенных механизмов возобновления и деления данных на части (chunking) |
Задержка при восстановлении соединения | Восстановление соединения после его разрыва может занять некоторое время. Из-за этого бывают задержки в приложениях с высокими требованиями к времени отклика |
Применение WebSocket: примеры популярных систем и приложений
Области, где используется WebSocket:
Чаты. В чате WebSocket позволяет клиенту и серверу обмениваться сообщениями в реальном времени. Примеры таких приложений: WhatsApp Web, Slack и Facebook Messenger. Пользователи получают сообщения мгновенно, как только отправитель их посылает.
Онлайн-игры. В играх WebSocket используется для обмена данными в реальном времени между клиентами и игровым сервером. Это необходимо для синхронизации движений игроков, отправки команд и актуализации игровых сред. Примеры: Fortnite, League of Legends.
Финансовые платформы. В системах онлайн-торговли и на биржах WebSocket обеспечивает мгновенные обновления цен на акции, криптовалюты или валюты, что помогает пользователям быстро принимать решения. Примеры: криптовалютные биржи Binance и Coinbase.
Веб-аналитика. Приложения для анализа данных в реальном времени и системы мониторинга веб-трафика используют WebSocket для мгновенного отображения результатов и обновлений.
Приложения для совместной работы. Например, Google Docs или Trello используют WebSocket для мгновенного обмена данными между пользователями, которые работают над общими документами или досками задач.
Мобильные приложения. WebSocket применяется в приложениях для заказа такси или доставки еды, где состояние заказов и изменения в маршрутах нужно обновлять в реальном времени.
Системы уведомлений. WebSocket подходит для приложений, которые требуют доставки уведомлений пользователю в реальном времени. Например, оповещений о новых сообщениях, событиях в социальных сетях или ответах на форуме.
Интернет вещей (IoT). WebSocket встречается при работе IoT-устройствами , таких, как «умные» дома, системы мониторинга здоровья и датчики. Протокол позволяет передавать данные на серверы в реальном времени и обеспечивать немедленную обработку информации.
Список можно продолжать. WebSocket также находит применение в колл-центрах, СRM-системах, навигаторах. Проще говоря, везде, где нужен постоянный доступ к данным.
Зачем разбираться в технологии WebSocket
Важно иметь знания о протоколе WebSocket, чтобы:
Понимать природу происходящих процессов — «рукопожатия», установки соединения, обмена фреймами.
Своевременно диагностировать ошибки и предпринимать меры при обрывах соединений.
Защищаться от возможных атак, таких, как Cross-protocol attacks, Message injection, DDoS.
Оптимизировать производительность — настраивать буферы и сжатие сообщение, сокращать сетевые издержки, управлять потоками данных.
Выполнять собственные надстройки, например, пользовательские форматы сообщений, Heartbeats, Reconnect-логику.
Работать в нестандартных средах, где не получается использовать готовые привычные решения.
Понимать взаимодействие с другими уровнями сети и управлять соединением.
Контролировать поведение приложений при нагрузке в тысячи одновременных соединений.
И, наконец, понимание принципов работы протокола и его особенностей упрощает создание высоконагруженных и масштабируемых приложений. Разработчик должен понимать, как будет происходить обмен данными, что может пойти не так и как быстро устранить проблемы.
Заключение
WebSockets — технология для сервисов, которые должны в реальном времени обновлять данные. Внедряя ее в проект, позаботьтесь о безопасности: используйте WebSocket (wss://) для производственных приложений, проверяйте входящие сообщения на сервере, настройте тайм-ауты для запросов с целью предотвращения DDos-атак. Кстати, надежную защиту от них обеспечивает сервис Anti-DDoS+WAF от Cloud.ru.
