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

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

Шрифт:

var emulation = require( fs').readFileSync("EventSourceEmulation.js");

// Массив объектов ServerResponse, который будет использоваться для отправки событий

var clients = [];

// Отправлять комментарий клиентам каждые 20 секунд, чтобы предотвратить

// закрытие соединения с последующими попытками восстановить его

setInterval(function {

clients.forEach(function(client) {

client. write('': ping\n");

});

}, 20000);

// Создать новый сервер

var server = new http.Server;

// Когда сервер получит новый запрос, он вызовет эту функцию

server.on( "request", function (request, response) {

// Проанализировать запрошенный URL

var url = require(’url').parse(request.url);

// Если запрошен URL "/", отправить пользовательский интерфейс чата,

if (url.pathname === "/") { // Запрошен пользовательский интерфейс чата

response.writeHead(200, {"Content-Type": "text/html"});

response.write("<script>" + emulation + "</script>");

response.write(clientui);

response.end;

return;

}

// Если запрошен любой другой URL, кроме "/chat", отправить код 404

else

if (url.pathname !== "/chat") {

response.writeHead(404);

response.end;

return;

}

// Если был выполнен POST-запрос - клиент отправил новое сообщение

if (request.method === "POST") {

request.setEncoding("utf8");

var body = "";

// При получении фрагмента данных добавить его в переменную body

request.on("data", function(chunk) {
body += chunk; });

// По завершении запроса отправить пустой ответ

// и широковещательное сообщение всем клиентам,

request.on("end", function {

response.writeHead(200); // Ответ на запрос

response.end;

// Преобразовать сообщение в формат текст/поток-событий.

// Убедиться, что все строки начинаются с префикса "data:"

// и само сообщение завершается двумя символами перевода строки,

message = 'data: ' + body, replace('\n’, '\ndata: ') + "\r\n\r\n";

// Отправить сообщение всем клиентам

clients.forEach(function(client) { client.write(message); });

});

}

// Если иначе, клиент запросил поток сообщений

else {

// Установить тип содержимого и отправить начальное событие message

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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