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

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

Жанры

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

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

Хозяин Теней 7

Петров Максим Николаевич
7. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 7

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда II

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

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

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Гримуар темного лорда IX

Грехов Тимофей
9. Гримуар темного лорда
Фантастика:
попаданцы
альтернативная история
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда IX

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Железный Воин Империи II

Зот Бакалавр
2. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Железный Воин Империи II

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

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

Вернувшийся: Первые шаги. Том II

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

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Родословная. Том 4

Ткачев Андрей Юрьевич
4. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 4

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Мастер решений

Земляной Андрей Борисович
3. Специалист по выживанию
Фантастика:
боевая фантастика
космическая фантастика
6.20
рейтинг книги
Мастер решений

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9