Статьи

Создание веб-приложения для чата на основе Node.js: подключение с помощью WebSockets

Эта статья является частью серии технологий веб-разработки от Microsoft. Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.

Эта серия руководств по Node.js поможет вам создать веб-приложение для чатов в режиме реального времени с поддержкой Node.js, полностью развернутое в облаке. В этой серии вы узнаете, как настроить Node.js на вашем компьютере с Windows (или просто познакомитесь с концепциями, если вы работаете на Mac), как разработать веб-интерфейс с Express , как развернуть приложение Node.js Express для Azure , как использовать Socket.IO для добавления слоя в реальном времени и как развернуть его все вместе.

В этом учебном пособии в качестве среды разработки будут использоваться необязательный плагин Visual Studio и плагин Node.js Tools for Visual Studio . Я предоставил ссылки на бесплатные загрузки обоих инструментов. Это статья для начинающих и среднего уровня — вы должны знать HTML5 и JavaScript.

Часть 1 — Введение в Node.js

Часть 2. Добро пожаловать в экспресс с Node.js и Azure

Часть 3 — Создание серверной части с Node.js, Mongo и Socket.IO

Часть 4. Создание пользовательского интерфейса чата с помощью Bootstrap

Часть 5. Соединение чата с помощью WebSockets

Часть 6. Финал и отладка удаленных приложений Node.js

Часть 5. Соединение чата с помощью WebSockets

Добро пожаловать в пятую часть практического руководства по Node.js: создайте веб-приложение для чата на основе Node.js.

В этой статье я покажу вам, как подключить интерфейсный чат к бэкенду чат-комнаты Node.js, который вы создали в части 2 , части 3 и части 4 .

Добавление jQuery, SocketIO и index.js

Первое, что мы хотим сделать перед тем, как приступить к написанию внешнего кода JavaScript, — это обеспечить, чтобы необходимые нам файлы и зависимости доставлялись сервером Node.js. Давайте сначала добавим jQuery и Socket.IO в файл layout.jade который расширен всеми остальными jade-файлами в нашем проекте.

Замените одну ссылку на bootstrap.min.js ссылкой на все остальные нужные нам файлы.

 script(type='text/javascript' src='http://ajax.aspnetcdn.com/ajax/jQuery/jquery2.1.1.min.js') script(type='text/javascript' src='/js/bootstrap.min.js') script(type='text/javascript' src='/socket.io/socket.io.js') 

Обратите внимание, что первая строка ссылается на jQuery, размещенный в сети доставки контента Microsoft Ajax . Этот CDN содержит популярные сторонние библиотеки JavaScript, такие как jQuery, и позволяет легко добавлять их в ваши веб-приложения. Вы можете значительно улучшить производительность ваших Ajax-приложений, используя CDN. Содержимое CDN кэшируется на серверах, расположенных по всему миру. CDN поддерживает SSL (HTTPS) на случай, если вам нужно обслуживать веб-страницу с использованием уровня защищенных сокетов.

Теперь я добавлю еще одну строку в конце, чтобы создать новый блок.

 block body_end 

Я делаю это так, чтобы любой Jade-файл, который расширяет layout.jade также мог добавлять теги script непосредственно перед концом тега body.

Теперь мы хотим использовать этот новый блок, чтобы добавить ссылку на наш файл index.js который мы создадим в папке public/js , обязательно создайте файл.

 block body_end script(type='text/javascript' src='/js/index.js') 

Удостоверьтесь, что блок начинается с нулевого отступа, чтобы следовать соглашениям кодирования Jade. Если вы запустите сервер Node.js и перейдете на главную страницу своего браузера, вы увидите в инструментах F12, что файлы обслуживаются правильно.

Быстрые изменения в app.js

Есть несколько вещей, которые я хочу изменить в app.js Во-первых, я хочу изменить направление сортировки, чтобы самые старые сообщения отправлялись первыми и вторыми. Я также хочу отправлять ранее полученные сообщения чата на тот же канал, на котором планирую получать новые сообщения. Изменения пойдут в строку 49 и 50 в app.js Это результат:

 var stream = collection.find().sort().limit(10).stream(); stream.on('data', function (chat) { socket.emit('chat', chat.content); }); 

Не забудьте установить CUSTOMCONNSTR_MONGOLAB_URI среды CUSTOMCONNSTR_MONGOLAB_URI перед app.js файла app.js как в противном случае бэкэнд Node.js будет аварийно app.js когда он не сможет подключиться к вашей MongoDB.

Включение кнопки отправки

Настало время включить эту кнопку отправки, чтобы отправлять сообщения в окне сообщений с помощью WebSockets на внутренний сервер в канале чата.

 var socket = io(); $('#send-message-btn').click(function () { var msg = $('#message-box').val(); socket.emit('chat', msg); $('#messages').append($('<p>').text(msg)); $('#message-box').val(''); return false; }); socket.on('chat', function (msg) { $('#messages').append($('<p>').text(msg)); }); 

Строка 1

Мы хотим создать сокет, и мы можем сделать это, вызвав функцию io() которая находится в socket.io-client.js .

Линия 2

После этого мы хотим выполнить функцию нажатием кнопки «Отправить сообщение», используя функцию jQuery $() и метод click() .

Линия 3

Мы получим строковое значение в окне сообщения, используя функцию jQuery $() и метод val() .

Строка 4

Мы используем функцию emit() для переменной сокета, которую мы создали в строке 1, чтобы отправить сообщение по каналу «chat», содержащее значение окна сообщения.

Строка 5-7

На этом этапе мы добавим сообщение в окне сообщений в div , в котором в качестве идентификатора сообщения будут использоваться messages , чтобы пользователь мог видеть, что сообщение было отправлено. Мы присвоим значение окна сообщения пустой строке, чтобы очистить его.

Линия 9-10

Мы хотим добавить сообщение, полученное по каналу чата от других пользователей, в div , в котором messages идентификатор. Серверная часть Node.js не будет повторно отправлять сообщение, которое клиент записал обратно себе, но это нормально, потому что мы сразу добавили сообщение в обработчик функции click() .

Что вы увидите, если вы успешно соединили свой сервер и интерфейс с помощью WebSockets

Вывод

Вуаля! Вы подключили свой бэкэнд и интерфейс с помощью WebSockets. Если вы хотите идентифицировать людей в чате или добавить аватар для каждого пользователя, это ваше дело, но вы можете использовать этот чат в дальнейшем. В следующей части я покажу вам, как развернуть этот анонимный чат в Azure, и покажу, как его можно отладить.

Оставайтесь с нами для части 6!

Часть 6. Финал и отладка приложений удаленного узла! здесь Вы можете быть в курсе этой и других статей, следуя моей учетной записи в Twitter

Подробнее Node.js Обучение на Azure

Для более глубокого изучения на узле, мой курс доступен здесь, в Microsoft Virtual Academy.

Или видео в более коротком формате на похожие темы:

Эта статья является частью серии технологий веб-разработки от Microsoft. Мы рады поделиться с вами Project Spartan и его новым механизмом рендеринга . Получите бесплатные виртуальные машины или проведите удаленное тестирование на устройстве Mac, iOS, Android или Windows на сайте modern.IE .