JavaScript. Подробное руководство, 6-е издание, стр. 403
<b>var socket = new WebSocket("ws://ws.example.com:1234/resource");</b>Чтобы использовать веб-сокеты в сценариях на языке JavaScript, достаточно будет освоить клиентский прикладной интерфейс веб-сокетов, описываемый здесь. Не существует эквивалентного серверного прикладного интерфейса для создания серверов с поддержкой веб-сокетов; в этом разделе будет представлен простой пример сервера, основанного на использовании интерпретатора Node (раздел 12.2) и сторонней серверной библиотеки поддержки веб-сокетов. Клиент и сервер взаимодействуют через долгоживущие TCP-сокеты, следуя правилам, определяемым протоколом веб-соке-тов. Мы не будем рассматривать здесь особенности протокола, но следует отметить, что протокол веб-сокетов спроектирован очень аккуратно, благодаря чему веб-серверы могут легко обрабатывать HTTP-соединения и соединения на основе веб-сокетов через один и тот же порт.
Веб-сокеты получили широкую поддержку среди производителей броузеров. В ранней, предварительной версии протокола веб-сокетов была обнаружена серьезная брешь в системе безопасности, поэтому на момент написания этих строк в некоторых броузерах поддержка веб-сокетов была отключена, - до стандартизации безопасной версии протокола. В Firefox 4, например, может потребоваться явно включить поддержку веб-сокетов, открыв страницу about:config и установив переменную «network.websocket. override-security-block» в значение true.
Аргументом конструктора
<b>WebSocket()</b>После создания сокета в нем обычно регистрируются обработчики событий:
<b>socket.onopen = function(e) { /* Соединение установлено. */ };</b><b>socket.onclose = function(e) { /* Соединение закрыто. */ };</b><b>socket.onerror = function(e) { /* Что-то пошло не так! */ };</b><b>socket.onmessage = function(e) {</b><b> var message = e.data; /* Сервер послал сообщение. */</b><b>};</b>Чтобы отправить данные серверу через сокет, следует вызвать метод
<b>send()</b><b>socket.send("Привет, сервер!");</b>Текущая версия прикладного интерфейса веб-сокетов поддерживает только текстовые сообщения и отправляет их в виде строк в кодировке UTF-8. Однако текущая версия спецификации протокола веб-сокетов включает поддержку двоичных сообщений, и будущие версии прикладного интерфейса, возможно, будут обеспечивать обмен двоичными данными с сервером.
По окончании взаимодействия с сервером сценарий может закрыть веб-сокет вызовом его метода
<b>close()</b>Веб-сокеты являются двунаправленными, и единственное соединение, установленное через веб-сокет, может использоваться клиентом и сервером для передачи сообщений друг другу в любой момент времени. Это взаимодействие не обязательно должно иметь форму запросов и ответов. Каждая служба, основанная на веб-сокетах, будет определять собственный «подпротокол» передачи данных между клиентом и сервером. С течением времени эти «подпротоколы» могут развиться, и вам может потребоваться реализовать клиенты и серверы, поддерживающие несколько версий подпротокола. К счастью, протокол веб-сокетов включает механизм, дающий возможность договориться о выборе подпротокола, который поддерживается и клиентом, и сервером. Конструктору
<b>WebSocket()</b><b>protocol</b><b>WebSocket</b>В разделе 18.3 описывается прикладной интерфейс объекта
<b>EventSource</b>Пример 22.16. Клиент чата на основе веб-сокетов
<b><script></b><b>window.onload = function() {</b><b> // Позаботиться о некоторых деталях пользовательского интерфейса</b><b> var nick = prompt("Введите свой псевдоним"); // Получить псевдоним</b><b> var input = document.getElementById("input"); // Отыскать поле ввода</b><b> input.focus(); // Установить фокус ввода</b><b> // Открыть веб-сокет для отправки и приема сообщений в чате.</b><b> // Предполагается, что HTTP-сервер, откуда загружается сценарий, также</b><b> // поддерживает веб-сокеты, и для связи с ним используется то же имя хоста</b><b> // и номер порта, но вместо протокола http:// используется протокол ws://</b><b> var socket = new WebSocket("ws://" + location.host + "/");</b><b> // Так через веб-сокет принимаются сообщения с сервера</b><b> socket.onmessage = function(event) { // Вызывается при получении сообщения</b><b> var msg = event.data; // Получить текст из объекта события</b><b> var node = document.createTextNode(msg); // Создать текстовый узел</b><b> var div = document.createElement("div"); // Создать элемент <div></b><b> div.appendChild(node); // Добавить текстовый узел</b>