Книга: 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
.
- ApplicationCache
- ArrayBuffer
- ArrayBufferView
- Attr
- Audio
- BeforeUnloadEvent
- Blob
- BlobBuilder
- Button
- Canvas
- BlobBuilder
- Button
- Canvas
- CanvasGradient
- CanvasPattern
- CanvasRenderingContext2D
- ClientRect
- CloseEvent
- Comment
- Console
- ConsoleCommandLine
- CSS2Properties
- CSSRule
- CSSStyleDeclaration
- CSSStyleSheet
- DataTransfer
- DataView
- Document
- DocumentFragment
- DocumentType
- DOMException
- DOMImplementation
- DOMSettableTokenList
- DOMTokenList
- Element
- ErrorEvent
- Event
- EventSource
- EventTarget
- FieldSet
- File
- FileError
- FileReader
- FileReaderSync
- Form
- FormControl
- Form Data
- FormValidity
- Geocoordinates
- Geolocation
- GeolocationError
- Geoposition
- HashChangeEvent
- History
- HTMLCollection
- HTMLDocument
- HTMLEIement
- HTMLFormControlsCollection
- HTMLOptionsCollection
- IFrame
- Image
- ImageData
- Input
- jQuery jQuery 1.4
- KeyEvent
- Label
- Link
- Location
- MediaElement
- MediaError
- MessageChannel
- MessageEvent
- MessagePort
- Meter
- MouseEvent
- Navigator
- Node
- NodeList
- Option
- Output
- PageTransitionEvent
- PopStateEvent
- ProcessingInstruction
- Progress
- ProgressEvent
- Screen
- Script
- Select
- Storage
- StorageEvent
- Style
- Table
- TableCell
- TableRow
- TableSection
- Text
- TextArea
- TextMetrics
- TimeRanges
- TypedArray
- URL
- Video
- WebSocket
- Window
- Worker
- WorkerGlobalScope
- WorkerLocation
- WorkerNavigator
- XMLHttpRequest
- XMLHttpRequestUpload