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

на главную - закладки

Жанры

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

url += "&jsonp=" + cbname; // добавить как новый параметр.

// Создать элемент script, который отправит запрос

var script = document.createElement("script");

// Определить функцию, которая будет вызвана сценарием

getJSONP[cbnum] = function(response) {

try {

callback(response); //
Обработать данные

}

finally { // Даже если функция или ответ возбудит исключение

delete getJSONP[cbnum]; // Удалить эту функцию

script.parentNode.removeChild(script); // Удалить элемент script

}

};

// Инициировать HTTP-запрос

script.src = url; // Указать url-адрес элемента

document.body.appendChild(script); // Добавить в документ

}

getJSONP.counter = 0; // Счетчик, используемый для создания уникальных имен

18.3. Архитектура Comet на основе стандарта «Server-Sent Events»

Проект стандарта «Server-Sent Events» определяет объект

EventSource
, который делает практически тривиальным создание приложений с архитектурой Comet. При его использовании достаточно передать URL-адрес конструктору
EventSource
и затем обрабатывать события «message» в полученном объекте:

var ticker = new EventSourcefstockprices. php”);

ticker.onmessage = function(e) {

var type = e.type;

var data = e.data;

// Обработать строки type и data.

}

Объект события «message» имеет свойство

data
, хранящее строку, отправленную сервером с этим событием в качестве полезной нагрузки. Кроме того, объект события имеет свойство
type
, как и все другие объекты событий. По умолчанию это свойство имеет значение «message», но источник события может указать в этом свойстве другую строку. Все события от данного сервера, источника событий, обрабатываются единственным обработчиком
onmessage
, который при необходимости может передавать их другим
обработчикам, опираясь на свойство
type
объекта события.

Протокол обмена, определяемый стандартом «Server-Sent Event», достаточно прост. Клиент устанавливает соединение с сервером (когда создает объект

EventSource
), а сервер сохраняет это соединение открытым. Когда происходит событие, сервер передает через соединение текстовую строку. Передача события через сеть выглядит примерно следующим образом:

event: bid установка свойства type объекта события

data: G00G установка свойства data

data: 999 добавляется перевод строки и дополнительные данные

пустая строка генерирует событие message

Протокол имеет также некоторые дополнительные особенности, позволяющие присваивать событиям идентификаторы и дающие клиенту возможность после восстановления соединения с сервером передавать этот идентификатор, чтобы сервер мог повторно послать все события, пропущенные клиентом. Однако эти особенности не имеют большого значения в данном обсуждении.

Одно из очевидных применений архитектуры Comet - реализация чатов: клиент может посылать в чат новые сообщения с помощью объекта

XMLHttpRequest
и подписываться на поток сообщений, поступающих от собеседников, с помощью объекта
EventSource
. Пример 18.15 демонстрирует, насколько просто реализовать клиента на основе объекта
EventSource
.

Пример 18.15. Простой клиент чата на основе объекта

EventSource

<script>

window.onload = function {

// Позаботиться о некоторых особенностях пользовательского интерфейса

var nick = prompt("Введите ваше имя"); // Получить имя пользователя

var input = document.getElementById("input"); // Отыскать поле ввода

input.focus; // Передать фокус ввода

// Подписаться на получение новых сообщений с помощью объекта EventSource

var chat = new EventSource("/chat");

chat.onmessage = function(event) { // Получив новое сообщение,

var msg = event.data; // Извлечь текст

var node = document.createTextNode(msg); // Преобр. в текстовый узел

Поделиться:
Популярные книги

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
4.80
рейтинг книги
Метатель

Доктор. Заново

Афанасьев Семён
1. Доктор
Фантастика:
фэнтези
альтернативная история
5.86
рейтинг книги
Доктор. Заново

Имперец. Том 4

Романов Михаил Яковлевич
3. Имперец
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Имперец. Том 4

Смерч войны

Робертс Эндрю
1. Историческая библиотека
Проза:
военная проза
5.00
рейтинг книги
Смерч войны

Справочник по лечению зависимостей

коллектив авторов 1
Справочная литература:
путеводители
5.00
рейтинг книги
Справочник по лечению зависимостей

Потомок бога 3

Решетов Евгений Валерьевич
3. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Потомок бога 3

Универсальный энциклопедический справочник

Исаева Елена Львовна
Справочная литература:
справочники
энциклопедии
5.00
рейтинг книги
Универсальный энциклопедический справочник

Неизвестные страницы истории российского флота

Виленов Влад
Научно-образовательная:
история
военное дело: прочее
военная история
5.00
рейтинг книги
Неизвестные страницы истории российского флота

Избрание сочинения в трех томах. Том второй

Кочетов Всеволод Анисимович
Проза:
советская классическая проза
5.00
рейтинг книги
Избрание сочинения в трех томах. Том второй

Полная история государства Российского в одном томе

Карамзин Николай Михайлович
Научно-образовательная:
история
5.00
рейтинг книги
Полная история государства Российского в одном томе

Место под солнцем

Марклунд Лиза
Анника Бенгтзон
Детективы:
криминальные детективы
6.00
рейтинг книги
Место под солнцем

Очерки времен и событий из истории российских евреев. 1945 – 1970 гг. Книга 6

Кандель Феликс Соломонович
Научно-образовательная:
история
5.00
рейтинг книги
Очерки времен и событий из истории российских евреев. 1945 – 1970 гг. Книга 6

Гвардия. (Дилогия)

Мусаниф Сергей Сергеевич
65. В одном томе
Фантастика:
научная фантастика
8.57
рейтинг книги
Гвардия. (Дилогия)

Глаза ночи

Бейн Диана
Любовные романы:
любовно-фантастические романы
эро литература
5.88
рейтинг книги
Глаза ночи