Книга: JavaScript. Подробное руководство, 6-е издание

WebSocket

WebSocket

двунаправленное сетевое соединение, подобное сокету (EventTarget)

Объект WebSocket представляет долгоживущее, двунаправленное сетевое соединение с сервером, поддерживающим протокол веб-сокетов. Данная модель сетевых взаимодействий существенно отличается от модели запрос/ответ, которую реализует протокол HTTP. Создать новое сетевое соединение можно вызовом конструктора WebSocket(). Отправлять текстовые данные на сервер можно с помощью метода send(), а принимать сообщения от сервера - с помощью обработчика событий «message». Дополнительные сведения приводятся в разделе 22.9.

Веб-сокеты - это новый прикладной интерфейс для веб-приложений; на момент написания этих строк поддерживался не всеми броузерами.

Конструктор

new WebSocket(string url, [string[] protocols])

Конструктор WebSocket() создает новый объект WebSocket и запускает (асинхронный) процесс установления соединения с сервером, поддерживающим протокол веб-сокетов. Аргумент url определяет сервер, с которым требуется установить соединение, и должен быть абсолютным URL-адресом с URL-схемой ws:// или wss://. Аргумент protocols - это массив названий подпротоколов. С помощью этого аргумента клиент может сообщить серверу, какие версии протоколов он поддерживает. Сервер должен выбрать один из них и информировать клиента о своем выборе в процессе установления соединения. В аргументе protocols можно также передать строку, а не массив: в этом случае значение аргумента будет интерпретироваться как массив с единственным элементом.

Константы

Следующие константы определяют допустимые значения свойства readyState.

unsigned short CONNECTING = 0

Продолжается выполнение процедуры установления соединения.

unsigned short OPEN = 1

Объект WebSocket соединен с сервером; можно отправлять и принимать сообщения.

unsigned short CLOSING = 2

Соединение закрывается.

unsigned short CLOSED = З

Соединение закрыто.

Свойства

readonly unsigned long bufferedAmount

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

readonly string protocol

Если конструктору WebSocket() был передан массив подпротоколов, это свойство будет хранить один из них, выбранный сервером. Обратите внимание, что в первый момент после создания объекта WebSocket соединение еще не установлено и выбор сервера неизвестен, поэтому первоначально это свойство содержит пустую строку. Если конструктору был передан список протоколов, значение этого свойства изменится в соответствии с выбором сервера, когда будет сгенерировано событие «open».

readonly unsigned short readyState

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

readonly string url

Это свойство хранит URL-адрес, который был передан конструктору WebSocket().

Методы

void close()

Если соединение еще не закрыто или для него еще не была запущена процедура закрытия, этот метод инициирует процесс его закрытия и присваивает свойству readyState значение CLOSING. События «message» могут продолжать возбуждаться даже после вызова метода close(), пока свойство readyState не получит значение CLOSED и не будет возбуждено событие «close».

void send(string data)

Отправляет данные data на сервер, подключенный к другому концу соединения. Этот метод возбуждает исключение, когда вызывается до того, как будет сгенерировано событие «open», т.е. пока свойство readyState имеет значение CONNECTING. Протокол веб-сокетов поддерживает обмен двоичными данными, но на момент написания этих строк текущая версия прикладного интерфейса веб-сокетов поддерживала только текстовые сообщения.

Обработчики событий

Сетевые взаимодействия по своей природе являются асинхронными, и, подобно объекту XMLHttpRequest, объект WebSocket также опирается на использование событий. Он определяет четыре свойства регистрации обработчиков событий, а также реализует интерфейс EventTarget, благодаря чему обработчики событий можно также регистрировать с помощью методов интерфейса EventTarget. Все события, описываемые ниже, возбуждаются в объекте WebSocket. Ни одно из них не всплывает, и ни для одного из них не предусмотрено действий по умолчанию, которые можно было бы отменить. Отметьте, однако, что им передаются различные объекты событий.

onclose

Событие «close» генерируется после закрытия соединения (и свойство readyState получит значение CLOSED). Обработчику события передается объект CloseEvent, который определяет, было соединение закрыто без ошибок или нет.

onerror

Событие «error» генерируется, когда возникает сетевая ошибка или ошибка протокола веб-сокетов. Обработчику события передается обычный объект Event
onmessage

Когда сервер отправляет данные через веб-сокет, объект WebSocket возбуждает событие «message» и передает обработчику объект MessageEvent, свойство data которого ссылается на принятое сообщение.

onopen

Конструктор WebSocket() возвращает управление еще до того, как будет установлено соединение с адресом url. Когда процедура установления соединения завершится и объект WebSocket будет готов к отправке и приему данных, будет возбуждено событие «open». Обработчику события передается обычный объект Event.

Оглавление книги


Генерация: 6.060. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз