WebSockets: что это, как работает, плюсы и минусы

22 апреля 2024
© sdecoret, shutterstock.com

Пользователи привыкли получать мгновенные ответы в мессенджерах, координаты местоположения на картах GPS. Им не нужно постоянно запрашивать обновление состояния в многопользовательских играх. В статье расскажем, как это происходит и какой протокол используется, особенно для тех разработчиков, кто готов нырнуть в создание мессенджеров, игр, карт и приложений для совместной работы.

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

Содержание
Развернуть

Экскурс в историю

WebSockets — это современная технология общения между клиентом и сервером, которая возникла в 2010 году. Увеличение интернет-пользователей, появление онлайн-игр и мессенджеров требовало от приложений мгновенного соединения с сервером без постоянного создания запросов пользователем.

Важно: Адам Барт в том же году провёл исследования, благодаря которым обнаружил, что при использовании прозрачных серверов злоумышленник может подменить кеш и клиент будет получать версию данных от хакера. В результате компании Firefox и Opera отказались от использования WebSockets в браузерах до устранения этой проблемы.

Со временем разработчики избавились от детских болезней технологии. Был введён единый стандарт RFC 6645. Теперь с помощью протокола WebSockets пересылают данные на любой домен безопасно и без лишнего сетевого трафика.

Что за транспорт для данных такой — WebSockets

WebSockets — сетевой протокол, который обеспечивает беспрерывную отправку и получение информации между клиентом и сервером. Разработчики обозначают его заглавными литерами от английских слов web и socket — WS или WSS (по аналогии HTTP и HTTPS).

Это интересно: в переводе с английского WebSocket означает «интернет-разъём».

По протоколу WS клиент-сервер передаёт сообщения через соединение TCP. Стандарт TCP создаёт надёжную и своевременную передачу информации.

WS и WSS = HTTP и HTTPS?

Как и у HTTP, у WebSockets существует две версии запроса — через WS и WSS.

WS — это простой протокол WebSockets, который не имеет шифрования. Это значит, что он может быть легко атакован и взломан мошенниками. Однако старые прокси-серверы ничего не знают о появившихся недавно WS. Поэтому они будут видеть только странные заголовки.

Протокол WSS, как и HTTPS, имеет защиту. Сервер и клиент хранят ключ-сертификат, благодаря которому они обеспечивают узнавание и расшифровку данных. Например, SIP-сервер у МТС Exolve работает на протоколе WSS.

Принцип работы WebSockets

Вот так работает веб-сокетс:

Вот так работает HTTP:

WebSockets: что это, как работают, плюсы и минусы

Вот так работает веб-сокетс:

Вот так работает HTTP:

WebSockets: что это, как работают, плюсы и минусы

Вот принцип работы WebSockets, чтобы было более понятно:

  1. Пользователь с персонального компьютера или мобильного приложения посылает HTTP-запрос первого рукопожатия главному ПК. В запросе он прописывает, что желает установить соединение по технологии WebSockets. Рукопожатию соответствует заголовок Upgrade. Заголовок Sec-WebSocket-Key имеет кодировку Base64. Вот такой GET-запрос создаёт клиент.

    GET ws://websocketexample.com:8181/ HTTP/1.1

    Host: localhost:8181

    Connection: Upgrade

    Pragma: no-cache

    Cache-Control: no-cache

    Upgrade: websocket

    Sec-WebSocket-Version: 13

    Sec-WebSocket-Key: b6gjhT32u488lpuRwKaOWs==

  2. Мобильный телефон или ПК на стороне клиента проходит проверку подлинности, и сервер создаёт соединение, отсылая ответ об успешном рукопожатии. Во время принятия ответа заголовок SecWebSocket-Accept содержит немного данных из Sec-WebSocket-Key. Такой метод помогает обойти коллизии в случае отсутствия поддержки технологии «Веб-сокет».

    HTTP/1.1 101 Switching Protocols

    Upgrade: websocket

    Connection: Upgrade

    Sec-WebSocket-Accept: rG8wsswmHTJ85lJgAE3M5RTmcCE=

Успешное рукопожатие определяет код 101 Switching Protocol. После того как связь установлена, включается полнодуплексный режим общения. Два компьютера могут отправлять сообщения друг другу одновременно.

В этом режиме могут быть отправлены файлы, имеющие большой вес. Например, фотографии с разрешением 3400×2200. Веб-сокет делит их по пакетам. Каждый пакет несёт в себе:

Благодаря этой технологии на один сервер могут заходить до 1 000 клиентов одновременно.

  • длину;
  • вид необходимой нагрузки;
  • данные о последнем кадре.

WS облегчает труд разработчиков контента

Библиотеки WebSockets поддерживают прямой ответ от клиента. Например, фреймворк Feathers использует протокол WebSockets для предоставления доступа к своему API. Благодаря WS разработчику не нужно писать повторяющийся код для соединения отдельных частей контента.

Как показывают тесты, проведённые независимым дата-аналитиком Дэвидом Люке, веб-сокет работает быстрее, чем обычный HTTP API. Он говорил об этом ещё в 2018 году в рапорте о проведённых испытаниях (смотрите ссылку выше).

Сегодня возможность динамического выбора подходящего транспортного протокола стала решающей для подключённых API и приложений. Тот же браузер Chrome использует WS на 90%.

Где можно наглядно увидеть использование технологии «Веб-сокет»

Современные популярные платформы программирования используют эту технологию. Разработчики реализуют WebSocket в большинстве языков для написания кода:

  • ActionCable в Ruby on Rails;
  • Channels в Django для Python;
  • Gorilla на Go;
  • Meteor;
  • Apollo.

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

Поэтому разработчики задействуют эту технологию:

  • в трейдерских приложениях;
  • в мессенджерах;
  • в социальных сетях;
  • в мобильных и компьютерных онлайн-играх.

Протокол WS, в отличие от HTTP, имеет лёгкий вес, поэтому позволяет с высокой частотой отправлять и получать данные. WebSockets даёт возможность сразу отобразить действия соперника в онлайн-игре или загрузить данные изменившихся курсов валют в трейдерских приложениях.

Плюсы и минусы современной технологии общения «клиент-сервер»

Из плюсов WebSockets разработчики отмечают:

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

Есть и отрицательные моменты в использовании WS:

  • • Высокие требования к серверным устройствам.
  • • Ввод дополнительных схем для общения между клиентом и сервером на этапе программирования, так как по умолчанию время таймаута устанавливается в районе 75 секунд. За это время может произойти разрыв соединения. До клиента посланный пакет данных может не дойти. Сервер узнает об этом только через 75 секунд — это много для требовательных к быстрому реагированию клиента онлайн-игр.
  • • Смена сети клиентом, о которой сервер может не узнать, если пользователь не разорвёт соединение и не начнёт новое.

Заключение

Протокол WebSockets считается универсальным. Он позволяет увеличить скорость сайта и приложений. С помощью него сейчас можно пересылать данные безопасно. Его поддерживает большинство популярных браузеров: Mozilla, Chrome и другие. А также продукт компании Exolve при подключении Voice API.

Пытаетесь найти API для подключения звонков и SMS в свои продукты? Вам явно потребуется надёжный провайдер с понятной документацией. В МТС Exolve есть всё необходимое для запуска рассылок, механизма авторизации и защиты номера.

Теги:

Подпишитесь на канал МТС в Telegram
МТС Офишиал
МТС Офишиал
Новости экосистемы. Статьи о технологиях. Разыгрываем гаджеты. Дарим промокоды.