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

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

Жанры

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); // Преобр. в текстовый узел

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

За Горизонтом

Вайс Александр
8. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
космоопера
5.00
рейтинг книги
За Горизонтом

Бастард Бога (Дилогия)

Матвеев Владимир
Фантастика:
альтернативная история
5.11
рейтинг книги
Бастард Бога (Дилогия)

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Вернувшийся: Посол. Том IV

Vector
4. Вернувшийся
Фантастика:
космическая фантастика
киберпанк
5.00
рейтинг книги
Вернувшийся: Посол. Том IV

Четники. Королевская армия

Тимофеев Алексей Юрьевич
Документальная литература:
биографии и мемуары
публицистика
5.00
рейтинг книги
Четники. Королевская армия

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Газлайтер. Том 22

Володин Григорий Григорьевич
22. История Телепата
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Газлайтер. Том 22

S-T-I-K-S. Пройти через туман

Елисеев Алексей Станиславович
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
7.00
рейтинг книги
S-T-I-K-S. Пройти через туман

Бастард Императора. Том 14

Орлов Андрей Юрьевич
14. Бастард Императора
Фантастика:
городское фэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Бастард Императора. Том 14

Последний Герой. Том 4

Дамиров Рафаэль
Последний герой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Последний Герой. Том 4

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

Вперед в прошлое 2

Ратманов Денис
2. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 2

Падение Софии (русский роман)

Хаецкая Елена Владимировна
Фантастика:
фэнтези
5.00
рейтинг книги
Падение Софии (русский роман)