Pull to refresh

Клиент-серверное взаимодействие в реальном времени с помощью веб-сокетов

Перевод статьи Джона МюллераWhat Is a WebSockets Push-Styled API and How Does It Work?

Технологии отправки уведомлений от сервера к клиенту (пуш-технологии) должны покрывать различный набор данных и потребностей пользователей. В первой и второй части серии (ссылки на оригинал, прим.) обсуждались методы обеспечения обмена данными между серверами в реальном времени, при которых клиенты получали обновления данных постфактум (не в режиме реального времени, прим.). Однако, иногда требуется отправить данные от сервера к клиенту, в режиме реального времени, и тут пригодятся веб-сокеты (WebSockets). В данной статье обсуждаются возможности веб-сокетов и их отличие от остальных пуш-технологий.

Что такое веб-сокет?


Веб-сокеты позволяют клиенту установить такое соединение с сервером, при котором данные будут приходить при возникновении серверного события (event-driven) в режиме реального времени. В отличие от множества веб-технологий, веб-сокеты не следуют стратегии «Запрос-ответ», при которой соединение открывается для выполнения запроса, и закрывается сразу после его выполнения. Веб-сокеты держат соединение открытым. Следовательно, клиенту не требуется постоянно опрашивать (poll) сервер на предмет наличия обновлений, что значительно ускоряет быстродействие приложения при меньшем расходе ресурсов. Веб-сокет состоит из следующих частей:

  • Клиент (Client): делает запрос к серверу с целью получения определенных данных.
  • Портал веб-сокета (Websocket Gateway): является интерфейсом между клиентом и сервером.
  • Сервер (Server): Отсылает обновления клиенту через портал веб-сокета, в режиме реального времени.

Смысл веб-сокета — предоставить альтернативу HTTP-соединению, в виде TCP-соединения. Первоначальный запрос клиента выполняется с помощью HTTP, в котором указывается заголовок для смены (upgrade) протокола, и всё последующее взаимодействие выполняется с помощью протокола веб-сокетов (WS protocol). Другими словами, вместо отправки запроса к http://<чего-нибудь>, происходит отправка к ws://<чего-нибудь>. Данная техника достигает следующих целей:

  • Передается только важная информация, без дополнительной нагрузки в виде HTTP-заголовков, что экономит ресурсы и открывает возможность для взаимодействия в реальном времени.
  • Создается полноценный дуплекс-канал, при котором отпадает необходимость в таких стратегиях как «опрос» (polling) и «запрос-ответ» (request/response). Как клиент, так и сервер, могут отдавать данные в любой момент. Также, сокращается объем сетевого трафика, что повышает производительность приложения путем сокращения задержки ответа, которая обычно возникает в веб-взаимодействиях.
  • Использование единственного TCP-соединения сокращает потребление ресурсов.
  • Поддержка открытого TCP-соединения открывает возможность передачи данных в виде потока (streaming).

Также, веб-сокеты превосходят ограничения существующих технологий:

  • Опрос (polling): периодически выполняющийся цикл запросов на стороне клиента с целью получить данные от сервера, даже при отсутствии таковой на сервере. Тратится огромное количество ресурсов впустую.
  • HTTP потоки (HTTP streaming): несмотря на то что соединение остается открытым всё время, использование стандартных HTTP-заголовков увеличивает размер передаваемых данных и снижает производительность.
  • Асинхронный JavaScript и XML (AJAX): полагается на такой объект JavaScript как XmlHttpRequest ради подмены части страницы, если это потребуется в результате обновления данных. Аналогично, HTTP-заголовки повышают размер передаваемых данных, а взаимодействие через полу-дуплекс требует больше TCP каналов, и когда Веб-сервер отправляет данные отдельным клиентам — тратится больше ресурсов.

Для использования веб-сокетов требуются совместимые браузеры, в список которых входят также: Chrome, Edge, Firefox, Internet Explorer, Opera, и Safari (см. caniuse, прим. переводчика). Потребность в совместимом браузере ограничивает пользу от веб-сокетов (однако, это ограничение незначительно пока нет необходимости в поддержке большого количества пользователей со старыми браузерами).

Хоть и данная статья рассказывает, в основном, о взаимодействии браузера с сервером через веб-сокеты, есть также возможность веб-сокетного взаимодействия между серверами; клиенты для веб-сокета доступны для большинства основных серверных платформ: Node.js, PHP, Python, Ruby, .NET, и Java.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings