Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Введение в веб-веб-сокеты

В традиционной модели запрос-ответ, используемой в HTTP, клиент запрашивает ресурсы, а сервер предоставляет ответы. Обмен всегда инициируется клиентом. Сервер не может отправить какие-либо данные, если клиент их не запрашивал. Эта модель хорошо работала для Интернета, когда клиенты время от времени делали запросы на документы, которые менялись редко. Однако недостатки этого подхода становятся всё более актуальными, поскольку контент быстро меняется, и пользователи ожидают всё более интерактивного взаимодействия. Протокол веб-сокетов устраняет эти недостатки, предоставляя полнодуплексный канал связи между клиентом и сервером. В сочетании с другими клиентскими технологиями, такими как JavaScript и HTML5, веб-сокеты позволяют веб-приложениям предоставлять пользователям больше возможностей.

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

Протокол веб-сокетов состоит из двух частей: установление соединения и передача данных. Клиент инициирует соединение, отправляя запрос конечной точке веб-сокета, используя его URI. Установление соединения совместимо с существующей HTTP-инфраструктурой: веб-серверы интерпретируют его как запрос на обновление HTTP-соединения. Пример установления соединения от клиента выглядит следующим образом:

GET /path/to/websocket/endpoint HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://localhost
Sec-WebSocket-Version: 13

Пример ответа сервера при получении запроса клиента на установление соединения:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

Сервер применяет известную операцию к значению заголовка Sec-WebSocket-Key, чтобы сгенерировать значение заголовка Sec-WebSocket-Accept. Клиент применяет ту же операцию к значению заголовка Sec-WebSocket-Key, и соединение устанавливается успешно, если результат соответствует значению, полученному с сервера. Клиент и сервер могут отправлять сообщения друг другу после того, как соединение успешно установлено.

Веб-сокеты поддерживают текстовые (в кодировке UTF-8) и бинарные сообщения. Управляющие команды в веб-сокетах — это close, ping и pong (ответ на команду ping). Команды ping и pong также могут содержать данные приложения.

Конечные точки веб-сокетов представлены URI, которые имеют вид:

ws://host:port/path?query
wss://host:port/path?query

Схема ws представляет незашифрованное соединение веб-сокета, а схема wss — зашифрованное соединение. Компонент port является необязательным. Номер порта по умолчанию — 80 для незашифрованных соединений и 443 для зашифрованных. Компонент path указывает местоположение конечной точки на сервере. Компонент query является необязательным.

Современные веб-браузеры реализуют протокол веб-сокетов и предоставляют JavaScript API для подключения к конечным точкам, отправки сообщений и назначения Callback-методов для событий веб-сокетов (таких как открытие и закрытие соединения, получение сообщения).


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)