JavaScript. Подробное руководство, 6-е издание, стр. 404

<b>    document.body.insertBefore(div, input); // и вставить div перед полем ввода </b>

<b>    input.scrollIntoView(); // Гарантировать видимость элемента input</b>

<b>  }</b>

<b>  // Так через веб-сокет отправляются сообщения на сервер</b>

<b>  input.onchange = function() { // Когда пользователь нажмет клавишу Enter</b>

<b>    var msg = nick + &quot;: &quot; + input.value; // Имя пользователя и текст</b>

<b>    socket.send(msg); // Отправить через сокет</b>

<b>    input.value = &quot;&quot;; // Подготовиться к вводу следующего сообщения</b>

<b>  }</b>

<b>};</b>

<b>&lt;/script&gt;</b>

<b>&lt;!-- Пользовательский интерфейс - это единственное поле ввода --&gt;</b>

<b>&lt;!-- Новые сообщения в чате будут появляться перед этим элементом --&gt;</b>

<b>&lt;input id=&quot;input” style=&quot;width:100%&quot;/&gt;</b>

В примере 22.17 демонстрируется реализация сервера чата, основанного на веб-сокетах, которая предназначена для работы под управлением интерпретатора Node (раздел 12.2). Сравните этот пример с примером 18.17, чтобы увидеть, что веб-сокеты упрощают не только клиентскую часть реализации чата, но и серверную.

Пример 22.17 Сервер чата на основе веб-сокетов, выполняющийся под управлением Node

<b>/*</b>

<b>* Этот серверный сценарий на языке JavaScript предназначен для выполнения</b>

<b>* под управлением NodeJS. Он играет роль сервера веб-сокетов, реализованного поверх</b>

<b>* HTTP-сервера с использованием внешней библиотеки websocket, которую можно найти</b>

<b>* по адресу: </b><a href="https://github.com/miksago/node-websocket-server/"><b>https://github.com/miksago/node-websocket-server/</b></a><b>. При обращении</b>

<b>* к ресурсу &quot;/&quot; он возвращает HTML-файл клиента чата. В ответ на обращение к любому</b>

<b>* другому ресурсу возвращается код 404. Сообщения принимаются посредством протокола</b>

<b>* веб-сокетов и просто рассылаются по всем активным соединениям.</b>

<b>*/</b>

<b>var http = require('http');           // Использовать HTTP-сервер в Node</b>

<b>var ws = require('websocket-server'); // Использовать внешнюю библиотеку</b>

<b>// Прочитать исходный файл с реализацией клиента чата. Используется ниже,</b>

<b>var clientui = require('fs').readFileSync(&quot;wschatclient.html&quot;);</b>

<b>// Создать НТТР-сервер</b>

<b>var httpserver = new http.Server();</b>

<b>// Когда HTTP-сервер получит новый запрос, будет вызвана эта функция</b>

<b>httpserver.on(&quot;request”, function (request, response) {</b>

<b>  // Если запрошен ресурс &quot;/&quot;, отправить реализацию клиента чата,</b>

<b>  if (request.иrl === &quot;/&quot;) { // Запрошена реализация клиента чата</b>

<b>    response.writeHead(200, {''Content-Type”: &quot;text/html”});</b>

<b>    response.write(clientui); response.end();</b>

<b>  }</b>

<b>  else { // В ответ на любой другой запрос отправить код 404 &quot;Not Found&quot;</b>

<b>    response.writeHead(404);</b>

<b>    response.end();</b>

<b>  }</b>

<b>});</b>

<b>// Обернуть HTTP-сервер сервером на основе веб-сокетов</b>

<b>var wsserver = ws.createServer({server: httpserver});</b>

<b>// Вызывать эту функцию при получении новых запросов на соединение</b>

<b>wsserver.on(&quot;connection&quot;, function(socket) {</b>

<b>  socket.send(&quot;Добро пожаловаь в чат.&quot;); // Приветствовать нового клиента</b>

<b>  socket.on(&quot;message&quot;, function(msg) { // Принимать сообщения от клиента</b>

<b>    wsserver.broadcast(msg); // И рассылать их всем остальным</b>

<b>  });</b>

<b>});</b>

<b>// Запустить сервер на порту 8000. Запуск сервера на основе веб-сокетов</b>

<b>// приводит также к запуску HTTP-сервера. Для его использования подключайтесь</b>

<b>// по адресу </b><a href="http://localhost:8000/"><b>http://localhost:8000/</b></a><b>. wsserver.listen(8000);</b>

III

Справочник по базовому JavaScript

Эта часть книги представляет собой справочник по всем классам, свойствам и методам базового прикладного программного интерфейса JavaScript. В справочнике описываются следующие классы и объекты, в алфавитном порядке:

<b>Arguments</b>

<b>Array</b>

<b>Boolean</b>