Статья опубликована в рамках: Научного журнала «Студенческий» № 10(30)
Рубрика журнала: Информационные технологии
Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5, скачать журнал часть 6
ЭВОЛЮЦИЯ МОДЕЛИ ВЗАИМОДЕЙСТВИЙ В ВЕБЕ НА ПРИМЕРЕ ВНЕДРЕНИЯ ПРОТОКОЛА ВЕБ-СОКЕТОВ
АННОТАЦИЯ
В статье анализируются проблемы эволюции моделей клиент-серверного взаимодействия в вебе на примере миграции от простого протокола HTTP к более сложному протоколу веб-сокетов, позволяющему непрерывное полнодуплексное взаимодействие между "клиентской" и "серверной" сторонами.
Ключевые слова: веб-клиент, веб-сервер, веб-сокеты, полнодуплексное взаимодействие.
В настоящее время популярность веб-сервисов непрерывно растет и, согласно статистике [1], в общемировом масштабе посещаемость веб-приложений уступает нативным примерно на 12% (рис. 1), в то время как доходы для компаний-владельцев веб-приложений превышают доходы для нативных примерно на 50% (рис.2). Данные актуальны на 2015 год.
Рисунок 1. Соотношение процента нативных и веб-приложений
Рисунок 2. Соотношение количества доходов, получаемых с нативных и веб-приложений
Среди наиболее важных показателей востребованности и привлекательности веб-приложения можно выделить скорость его работы и актуальность отображаемых данных. Протокол WebSocket обеспечивает крайне высокую производительность передачи информации, и, соответственно, предоставляет клиенту максимально актуальный статус данных.
WebSocket - относительно новый протокол прикладного уровня, обеспечивающий полнодуплексную связь поверх TCP-соединения и TCP-сокетов, который предназначен для обмена данными между сервером и браузером в режиме реального времени [5]. После отправки клиентом HTTP-запроса и прохождения процедуры «тройного рукопожатия» может быть установлено клиент-серверное взаимодействие по протоколу WebSocket. Полнодуплексная связь используется веб-сервером для отправки обновлений на клиента асинхронным путем [6]: канал открыт и клиент может использовать языковые интерфейсы асинхронных взаимодействий (fetch, Promise, async/await) для обработки сообщений, получаемых с помощью веб-сокетов.
Сокет - это программный интерфейс, представляющий собой конечную точку соединения. Это абстрактное понятие, которое, в большинстве случаев, используется для коммуникации программ в сети. Известно, что для взаимодействия компьютеров с помощью стека протоколов TCP/IP используются IP-адреса и порты. Первое на сегодняшний день представляет собой 32-битный адрес (для протокола IPv4, 128-битный для IPv6), чаще всего его представляют в символьной форме mmm.nnn.ppp.qqq (адрес, разбитый на четыре секции, разделенных точками, по одному байту в поле). Второе — это номер порта в диапазоне от 0 до 65535 (для протокола TCP). Пара IP-адрес и порт - и есть сокет («гнездо», соответствующее адресу и порту) [8].
В вебе сокеты используются протоколом HTTP для установки соединения. При инициализации сессии клиент открывает TCP соединение с HTTP сервером и, после получения ответа от сервера клиент отправляет HTTP запрос. Здесь необходимо отметить, что протокол HTTP использует только одно TCP соединение - от клиента к серверу. Веб-сокеты же, в свою очередь, устанавливают соединение поверх HTTP-протокола [3]. При отправке из браузера GET-запроса на соединение заголовки запроса выглядят следующим образом:
GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: site.com
Origin: http://site.com
После чего, в случае успешного соединения, и если на сервере поддерживается протокол WebSockets, сервер отправляет ответ следующего вида:
HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://site.com
WebSocket-Location: ws://site.com/demo
И если браузер это устраивает, то он оставляет TCP-соединение открытым. Далее, если одна из сторон хочет передать второй какую-либо информацию, она отправляет дата-фрейм следующего вида [6]:
0x00, <строка в кодировке UTF-8>, 0xFF
Весь дата-фрейм в таком случае - просто строка текста: последовательность байт, в начале которой стоит нулевой байт 0x00, а в конце — 0xFF. При этом не передается ни заголовков, ни метаданных. Таким образом, по WebSocket соединению можно отправлять любую информацию, будь то XML, JSON или даже бинарные данные. Еще одним преимуществом WebSocket по сравнению с другими способами передачи данных (например, Long Polling) является отсутствие ограничений на время жизни канала в неактивном состоянии.
Для того, чтобы на стороне клиента обрабатывать данные, отправленные с сервера по протоколу WebSocket, необходимо использовать следующий стандартный код, или подобный ему [2]:
Рисунок 3. Пример клиентского кода для установки WebSocket соединения
Чтобы продемонстрировать производительность веб-сокетов группой Kaazing Corporation был проведен эксперимент [9], результаты которого продемонстрированы на рисунке 3. В ходе эксперимента была проведена передача большого количества данных (котировок валютных пар) методом Websockets и методом Polling (метод общения клиента с сервером путем частых запросов к серверу стандартными пакетами и проверка на наличие изменений информации), являвшийся популярным решением до стандартизации протокола WebSockets. Основной недостаток метода Polling - запросы клиента повторяются со строгим интервалом времени, что не является лучшим решением для отображения данных в реальном времени, так как зачастую интервал времени, за которое изменится информация, предугадать невозможно.
В ходе эксперимента были смоделированы три ситуации, в которых клиенты либо получали одно сообщение в секунду по протоколу WebSocket, либо получали сообщения методом Polling с интервалом запроса к серверу в одну секунду:
- 1000 клиентов;
- 10000 клиентов;
- 100000 клиентов.
На графике видно, что при передаче данных с помощью Polling количество передаваемой информации значительно/многократно превосходит количество информации, передаваемой с помощью веб-сокетов, что влечет за собой неминуемую потерю скорости работы приложения.
Рисунок 3. Сравнение необходимой пропускной способности сети при передачи пустого сообщения при помощи Polling соединения и при помощи вебсокетов
Выводы
В данной статье рассмотрена эволюция веб-протоколов на примере внедрения протокола WebSockets. Полнодуплексное взаимодействие между клиентом и сервером позволяет в полной мере реализовать отображение данных в реальном времени. Области применения данной технологии неограниченны и крайне актуальны на сегодняшний день. Это, например, совместная работа над документами в интернете, многопользовательские онлайн-игры, а также веб-приложения, использующие в работе геолокацию пользователя. Отсутствие дублируемой информации в заголовках HTTP запросов позволяет передавать только необходимую информацию в оптимальном объёме, что ведет к экономии трафика и, соответственно, к значительному росту скорости работы веб-приложений. Сообщество веб-разработчиков отреагировало на данные улучшения весьма положительным образом, и в настоящее время активно развиваются различные решения для усовершенствования взаимодействия и передачи данных, такие как библиотеки, фреймворки и так далее. Анализ их развития и поиск путей их совершенствования входит в задачи дальнейших исследований автора данной статьи.
Список литературы:
- Opera Mediaworks [Электронный ресурс] URL: http://operamediaworks.com/ (дата обращения: 14.12.2016)
- Павлов М.С. Реализация сервера для установления соединения и непрерывного обмена сообщениями между парами компьютер-мобильное устройство // Молодежный научно-технический вестник.— 2014. — N10. — С. 18.
- Федоренков Р.В., Ничушкина Т.Н. Интерактивный веб-сервис websocket // Инженерный вестник. — 2015. — N1. — С. 3.
- Государев И.Б. Развертывание и интеграция инновационных учебных сред: бордкастинг, облачные хостинги и edX // Компьютерные инструменты в образовании.— 2014. — N1. — С. 26-35
- The WebSocket Protocol [Электронный ресурс] URL: https://tools.ietf.org/pdf/rfc6455.pdf (дата обращения: 17.12.2016)
- Шестаков В.С., Сагидуллин А.С., Применение технологии WebSocket в Web-приложениях технологического назначения // Известия высших учебных заведений “Приборостроение”. — 2015. — N4. — C. 328-330
- Анисимов В.И., Гридин В.Н., Васильев С.А., Методы построения схемотехнических систем автоматизированного проектирования с использованием сервис-ориентированного подхода на базе протокола Websocket // Системы и средства информатики. — 2016. — Т. 26. — N2. — С. 136-146
- Java Documentation [Электронный ресурс] URL: https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html (дата обращения: 19.12.2016)
- HTML5 WebSocket: A Quantum Leap in Scalability for the Web [Электронный ресурс] URL: http://websocket.org/quantum.html (дата обращения: 18.12.2016)
Оставить комментарий