JavaScript. Подробное руководство, 6-е издание, стр. 293
<b> else</b><b> if (url.pathname !== "/chat") {</b><b> response.writeHead(404);</b><b> response.end();</b><b> return;</b><b> }</b><b> // Если был выполнен POST-запрос - клиент отправил новое сообщение</b><b> if (request.method === "POST") {</b><b> request.setEncoding("utf8");</b><b> var body = "";</b><b> // При получении фрагмента данных добавить его в переменную body</b><b> request.on("data", function(chunk) { </b><b>body += chunk; });</b><b> // По завершении запроса отправить пустой ответ</b><b> // и широковещательное сообщение всем клиентам,</b><b> request.on("end", function() {</b><b> response.writeHead(200); // Ответ на запрос</b><b> response.end();</b><b> // Преобразовать сообщение в формат текст/поток-событий.</b><b> // Убедиться, что все строки начинаются с префикса "data:"</b><b> // и само сообщение завершается двумя символами перевода строки,</b><b> message = 'data: ' + body, replace('\n’, '\ndata: ') + "\r\n\r\n";</b><b> // Отправить сообщение всем клиентам</b><b> clients.forEach(function(client) { client.write(message); });</b><b> });</b><b> }</b><b> // Если иначе, клиент запросил поток сообщений</b><b> else {</b><b> // Установить тип содержимого и отправить начальное событие message </b><b> response.writeHead(200, {'Content-Type': "text/event-stream" });</b><b> response.write("data: Connected\n\n");</b><b> // Если клиент закрыл соединение, удалить соответствующий</b><b> // объект response из массива активных клиентов</b><b> request.connection.on("end", function() {</b><b> clients.splice(clients.index0f(response), 1);</b><b> response.end();</b><b> }):</b><b> // Запомнить объект response, чтобы в дальнейшем посылать сообщения с его помощью </b><b> clients.push(response);</b><b> }</b><b>});</b><b>// Запустить сервер на порту 8000. Чтобы подключиться к нему, используйте</b><b>// адрес </b><a href="http://localhost:8000/"><b>http://localhost:8000/</b></a><b>server.listen(8000);</b>19
Библиотека jQuery
В языке JavaScript чрезвычайно простой базовый и весьма сложный клиентский API, который к тому же отягощен многочисленными несовместимостями между броузерами. С выходом IE9 исчезли самые неприятные несовместимости, но многие программисты считают, что веб-приложения удобнее писать с использованием фреймворков или вспомогательных библиотек на языке JavaScript, упрощающих решение типичных задач и скрывающих различия между броузерами. На момент написания этих строк одной из наиболее популярных и широко используемых была библиотека jQuery. [52]
Библиотека jQuery получила весьма широкое распространение, и поэтому вебразработчики должны быть знакомы с ней: даже если вы не собираетесь ее использовать, вы наверняка встретитесь с ней в сценариях, написанных другими. К счастью, библиотека jQuery весьма стабильна и достаточно мала, чтобы ее можно было описать в этой книге. В этой главе дается обстоятельное введение, а в четвертой части вы найдете краткий справочник по библиотеке jQuery. В справочнике отсутствуют отдельные статьи для методов из библиотеки jQuery, однако в статье jQuery даются краткие описания всех методов.
Библиотека jQuery упрощает поиск элементов документа и облегчает манипулирование ими: добавление содержимого, изменение HTML-атрибутов и CSS-свойств, определение обработчиков событий и воспроизведение анимационных эффектов. Она также имеет вспомогательные функции поддержки архитектуры Ajax, позволяющие выполнять динамические HTTP-запросы, и функции общего назначения для работы с объектами и массивами.
Как следует из ее имени, основу библиотеки jQuery составляет реализация механизма запросов. Типичный запрос использует CSS-селектор, идентифицирующий множество элементов документа, и возвращает объект, представляющий эти элементы. Данный возвращаемый объект имеет множество удобных методов
для выполнения операций над всей группой выбранных элементов. Всякий раз, когда это возможно, эти методы возвращают объект, относительно которого они вызывались, что позволяет использовать прием составления цепочек из вызовов методов. Ниже перечислены особенности, которые обеспечивают широту возможностей и удобство использования библиотеки jQuery:
• Выразительный синтаксис (CSS-селекторов) для ссылок на элементы в документе
• Эффективная реализация механизма запросов, выполняющего поиск множества элементов документа, соответствующих указанному CSS-селектору
• Множество удобных методов для манипулирования множествами выбранных элементов
• Мощные приемы функционального программирования для выполнения операций сразу над всей группой элементов
• Выразительная идиома представления последовательностей операций (составление цепочек из вызовов методов)