Пользователи привыкли получать мгновенные ответы в мессенджерах, координаты местоположения на картах 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, чтобы было более понятно:
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: websocketSec-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 есть всё необходимое для запуска рассылок, механизма авторизации и защиты номера.
Переходите по ссылке, чтобы бесплатно попробовать МТС Exolve
Подписывайтесь на наш канал. Делимся полезными решениями для малого и среднего бизнеса, помогаем разобраться, рассказываем про тренды.
Ещё полезные статьи: