Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

// Разбить текст на строки и обойти их в цикле.

var lines = chunk.replace(/(\r\n|\r|\n)$/,"").split(/\r\n|\r|\n/);

for(var і = 0; і < lines.length; i++) {

var line = lines[i], pos = line.indexOf(":"), name.value="";

if (pos == 0) continue; // Игнорировать комментарии

if (pos > 0) { // поле name:value

name = line.substring(0,pos);

value = line.substring(pos+1);

if (value.charAt(O) == " ") value = value.substrings);

}

else name = line; // только поле name

switch(name) {

case "event": eventName = value; break;

case "data": data += value + "\n"; break;

case "id": lastEventld = value; break;

case "retry": retrydelay = parselnt(value) || 1000; break;

default: break; // Игнорировать любые другие строки

}

if (line === "") { // Пустая строка означает отправку события

if (evtsrc.onmessage && data !== "") {

// Отсечь завершающий символ перевода строки

if (data.charAt(data.length-1) == "\n")

data = data.substrings, data.length-1);

evtsrc.onmessage({ // Имитация объекта Event

type: eventName, // тип события

data: data, // данные

origin: url // происхождение данных

});

}

data = "";

continue;

}

}

}

};

}

Завершим описание архитектуры Comet примером серверного сценария. В примере 18.17 приводится реализация HTTP-сервера на серверном JavaScript, который выполняется под управлением интерпретатора Node (раздел 12.2). Когда клиент обращается к корневому URL «/», сервер отправляет ему реализацию клиента чата, представленную в примере 18.15, и реализацию имитации, представленную в примере 18.16. Когда клиент выполняет GET-запрос по URL-адресу «/chat», сервер сохраняет поток ответа в массиве и поддерживает соединение открытым. А когда клиент выполняет POST-запрос к адресу «/chat», сервер интерпретирует тело запроса как текст сообщения и добавляет префикс «data:», как того требует протокол Server-Sent Events, во все открытые потоки сообщений. Если вы установите интерпретатор Node, вы сможете запустить этот пример сервера локально. Он прослушивает порт 8000, поэтому после запуска сервера в броузере необходимо будет указать адресчтобы соединиться с сервером и начать общение с самим собой.

Пример 18.17. Сервер чата, поддерживающий протокол Server-Sent Events

// Этот программный код на серверном JavaScript предназначен для выполнения

// под управлением NodeJS. Он реализует очень простую, полностью анонимную комнату чата.

// Для отправки новых сообщений в чат следует использовать POST-запросы к URL /chat,

// а для получения текста/потока-событий сообщений следует использовать GET-запросы

// к тому же URL. При выполнении GET-запроса к / возвращается простой HTML-файл,

// содержащий пользовательский интерфейс чата для клиента.

var http = require('http'); // Реализация API HTTP-сервера в NodeJS

// HTML-файл для клиента чата. Используется ниже.

var clientui = require('fs').readFileSync( "chatclient.html");

  • Читать дальше
  • 1
  • ...
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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