WebSocket

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

Первая версия протокола появилась в 2009 году. Уже в 2011 году он получил статус RFC (Request for Comments, рабочее предложение), то есть был признан как стандарт, широко применяемый во Всемирной паутине. Сегодня технология поддержки веб-сокетов используется во всех мобильных, десктопных и серверных устройствах.

Как работают HTTP и AJAX

До появления веб-сокетов основным протоколом был HTTP. Он однонаправленный, то есть сервер отвечает только на запрос, отправленный клиентом. Для статичного контента вроде информационной статьи на сайте это не проблема. Но чтобы узнать об изменениях интерактивного контента (например, новом сообщении в онлайн-чате, комментариях или push-уведомлениях), нужно обновить страницу вручную.

Ситуацию улучшила технология AJAX — теперь клиент стал сам отправлять на сервер уточняющие HTTP-запросы в фоновом режиме.

Схема взаимодействия клиента с сервером до WebSocket

Такой подход имел недостатки:

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

Чтобы устранить эти недостатки, была разработана модель Comet, в которой уже вводилось постоянное соединение. Однако ее варианты содержали много ошибок и недоработок. 

Как работают веб-сокеты

Протокол WebSocket позволил сделать соединение двунаправленным и постоянным. Сервер может не только отвечать на запрос клиента, но и самостоятельно передавать новую информацию по мере ее поступления. Обмен данными происходит в рамках одного установленного соединения в режиме реального времени. Такой метод называется «открывающим рукопожатием». Клиенту нужно только прослушивать однажды открытый канал до получения ответа от сервера. 

WebSocket создает двунаправленное постоянное соединение по методу «открывающего рукопожатия».

В общем виде механизм веб-сокета работает так:

  1. Веб-страница или приложение создает скрипт с тремя коллбэками (функциями обратного вызова): первый и третий сообщают об установке и закрытии соединения, а второй срабатывает каждый раз, когда клиент получает новые данные от сервера.
  2. Клиент подключается к серверу по протоколу TCP и подает запрос:

    GET /demo HTTP/1.1
    Upgrade: WebSocket
    Connection: Upgrade
    Host: site.com
    Origin: http://site.com
  3. Сервер с поддержкой веб-сокетов отвечает:

    HTTP/1.1 101 Web Socket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    WebSocket-Origin: http://site.com
    WebSocket-Location: ws://site.com/demo
  4. Клиент оставляет соединение открытым — канал готов. Далее при любом обмене информацией между ним и сервером будет срабатывать второй коллбэк скрипта, установленного страницей или веб-приложением.

Веб-сокеты позволяют обмениваться текстовыми сообщениями, изображениями, аудио- и видеофайлами, потоковыми данными. Для передачи зашифрованных сообщений используется надстройка над протоколом WSS.

Где применяются веб-сокеты

Протокол WS создан для интерактивных, динамически обновляющихся сервисов, веб-приложений и устройств, работающих в режиме реального времени. Например:

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

Если пользователю нужны статичные или медленно обновляемые данные, веб-сокеты не требуются. Например, информационная статья, каталог товаров на сайте не меняются в течение долгого времени. Для получения обновлений достаточно вручную перезагрузить страницу.

Преимущества и недостатки

Преимущества:

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

Недостатки:

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

WebSocket — удобная технология передачи динамично обновляемых данных. Ее внедрение позволяет снизить нагрузку на сеть и серверное оборудование, ускорить работу сайта.  

Другие термины на букву «W»

Waterfall
Webpack

Все термины

Освойте новую профессию

(рейтинг: 5, голосов: 5)
Добавить комментарий