Чтение онлайн

ЖАНРЫ

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

store.put(record); // Или add, чтобы избежать затирания

}

status("Инициализация базы данных, загружено записей:

+ numlines + ".");

}

if (e.type == "load") {

// Если это было последнее событие load, значит, мы отправили в базу

// данных все сведения о почтовых индексах. Но, так как мы только

//
что обработали порядка 40000 записей, они все еще могут записываться

// в хранилище. Поэтому мы выполним простой запрос. Когда он будет

// успешно выполнен, это послужит сигналом, что база данных готова

// к работе, и наконец можно удалить строку сообщения и вызвать

// функцию f, которая так давно была передана функции withDB

lookupCity("02134",

function(s) { // Allston, MA

document.body.removeChild(statusline); withDB(f);

});

}

}

}

}

</script>

</head>

<body>

<р>Введите почтовый индекс, чтобы отыскать город:</р>

Индекс: <input onchange="displayCity(this.value)"></input>

Город: <output id="city"></output>

</div>

<div>

<р>Введите название города (с учетом регистра символов, без названия штата),

чтобы отыскать все города с этим названием и их почтовые индексы:</р>

Город: <input onchange="displayZipcodes(this.value)"></input>

<div id="zipcodes"></div>

</div>

<р><і>Зтот пример работает только в Firefox 4 и Chrome 11.</i>

<р><і>Выполнение первого запроса может занять длительное время.</і></р>

<р><і>Вам может потребоваться запустить Chrome с

ключом --unlimited-quota-for-indexeddb</i>

</body>

</html>

22.9. Веб-сокеты

В главе 18 демонстрируется, как клиентские сценарии на языке JavaScript могут взаимодействовать с серверами по сети. Все примеры в этой главе используют протокол HTTP, а это означает, что все они ограничены исходной природой

протокола HTTP: этот протокол, не имеющий информации о состоянии, состоит из запросов клиента и ответов сервера. Протокол HTTP фактически является узкоспециализированным сетевым протоколом. Более универсальные сетевые взаимодействия через Интернет (или через локальные сети) часто реализуются с использованием долгоживущих соединений и обеспечивают двунаправленный обмен сообщениями через TCP-сокеты. Довольно небезопасно предоставлять клиентскому сценарию на языке JavaScript доступ к низкоуровневым ТСР-сокетам, однако спецификация «WebSocket АРІ» определяет безопасную альтернативу: она позволяет клиентским сценариям создавать двунаправленные соединения с серверами, поддерживающими протокол веб-сокетов. Это существенно упрощает решение некоторых сетевых задач.

Прикладной интерфейс веб-сокетов удивительно прост в использовании. Сначала необходимо создать сокет с помощью конструктора

WebSocket:

var socket = new WebSocket("ws://ws.example.com:1234/resource");

Протокол веб-сокетов

Чтобы использовать веб-сокеты в сценариях на языке JavaScript, достаточно будет освоить клиентский прикладной интерфейс веб-сокетов, описываемый здесь. Не существует эквивалентного серверного прикладного интерфейса для создания серверов с поддержкой веб-сокетов; в этом разделе будет представлен простой пример сервера, основанного на использовании интерпретатора Node (раздел 12.2) и сторонней серверной библиотеки поддержки веб-сокетов. Клиент и сервер взаимодействуют через долгоживущие TCP-сокеты, следуя правилам, определяемым протоколом веб-соке-тов. Мы не будем рассматривать здесь особенности протокола, но следует отметить, что протокол веб-сокетов спроектирован очень аккуратно, благодаря чему веб-серверы могут легко обрабатывать HTTP-соединения и соединения на основе веб-сокетов через один и тот же порт.

Веб-сокеты получили широкую поддержку среди производителей броузеров. В ранней, предварительной версии протокола веб-сокетов была обнаружена серьезная брешь в системе безопасности, поэтому на момент написания этих строк в некоторых броузерах поддержка веб-сокетов была отключена, - до стандартизации безопасной версии протокола. В Firefox 4, например, может потребоваться явно включить поддержку веб-сокетов, открыв страницу about:config и установив переменную «network.websocket. override-security-block» в значение true.

*********************************************

Аргументом конструктора

WebSocket
является URL-адрес, в котором используется протокол ws:// (или wss:// - в случае с безопасными соединениями, по аналогии с https://). URL-адрес определяет имя хоста, к которому выполняется подключение, и может также определять порт (по умолчанию веб-сокеты используют тот же порт, что и протоколы HTTP и HTTPS) и путь или ресурс.

После создания сокета в нем обычно регистрируются обработчики событий:

socket.onopen = function(e) { /* Соединение установлено. */ };

socket.onclose = function(e) { /* Соединение закрыто. */ };

socket.onerror = function(e) { /* Что-то пошло не так! */ };

socket.onmessage = function(e) {

var message = e.data; /* Сервер послал сообщение. */

};

Поделиться с друзьями: