Microsoft Azure
Облачный бизнес
Вам понадобится

Microsoft Azure

Попробуйте платформу Microsoft Azure совершенно бесплатно.

Visual Studio

Бесплатная версия Visual Studio, позволяющая создавать приложения для платформы Microsoft Azure.

SDKs и дополнительные
инструменты

Инструменты разработки приложений для платформы Microsoft Azure.

Приложение Node.js на базе библиотеки Socket.io в Microsoft Azure

Библиотека Socket.io обеспечивает взаимодействие в режиме реального времени между сервером node.js и клиентами. В этом руководстве рассказывается, как разместить чат-клиент на базе socket.io в Microsoft Azure. Более подробную информацию Socket.io см. на веб-сайте  http://socket.io/.

Примечание. В примере к этому руководству показано использование API Socket.IO в Microsoft Azure. Для простоты в данном примере работает только один объект рабочей роли Microsoft Azure. Не следует использовать этот код в реальных условиях, так как настоящие приложения используют не менее двух объектов каждой роли в соответствии с «Соглашением об уровне обслуживания Microsoft Azure». Чтобы расширить данное приложение для нескольких объектов ролей, применяйте технологию Service Bus, которая разделяет состояние хранения socket.io между несколькими объектами. Примеры можно найти в сценариях использования Service Bus Queues and Topics в разделе  «Microsoft Azure SDK для репозитория Node.js в GitHub».

Снимок экрана готового приложения приведен ниже.

clip_image002

Цели

О чем пойдет речь в данном руководстве:

  • Особенности использования библиотеки Socket.io в Microsoft Azure.
  • Создание приложения с рабочей ролью Microsoft Azure.

Ключевые технологии

  • Облачные приложения Microsoft Azure.
  • Библиотека Node.js Socket.IO.

Настройка

Предполагается, что вы уже установили пакет  Microsoft Azure SDK для Node.js, а также загрузили и установили настройки публикации для своей подписки Microsoft Azure. Если вы еще не выполнили эти операции, прочитайте руководство  «Веб-приложение на базе Node.js».

Разделы руководства

  1. Особенности Microsoft Azure
  2. Пример размещения чат-клиента в рабочей роли
  3. Заключение и дальнейшие действия

Особенности Microsoft Azure

Размещенное в Microsoft Azure приложение имеет доступ только к портам, указанным в файле ServiceDefinition.csdef. По умолчанию проекты, созданные с помощью командлетаNew-AzureService из  Microsoft Azure SDK для Node.js, открывают порт 80. Однако при запуске проекта в эмуляторе Microsoft Azure может быть выбран другой порт, например 81. Убедитесь, что приложение всегда получает трафик на правильный порт, для чего воспользуйтесь переменной process.env.port, которая указывает номер нужного порта во время выполнения. Например:

app.listen(process.env.port);

Если приложение выполняется внутри веб-роли (созданной командлетом Add-AzureNodeWebRole), настройте Socket.io на использование транспортного протокола, отличного от WebSocket. Это связано с тем, что веб-роль работает на базе служб IIS7, которые в настоящее время не поддерживают WebSocket. Ниже приведен пример настройки Socket.io для использования длинного опроса.

io.configure(function () { 
    io.set("transports", ["xhr-polling"]); 
    io.set("polling duration", 10); 
});

Примечание. В данном руководстве используется рабочая роль, а не рассмотренная выше веб-роль.

Пример размещения чат-клиента в рабочей роли

Далее приведена пошаговая процедура создания установочного пакета чат-клиента на базе Socket.io для выполнения в рабочей роли Microsoft Azure.

Создайте проект

Нажмите Start, откройте All Programs, Microsoft Azure, щелкните правой кнопкой мыши Microsoft Azure PowerShell и выберите Run As Administrator. Такой способ запуска среды Windows PowerShell гарантирует, что будут доступны все консольные инструменты Node. Запуск с расширенными правами позволяет избежать лишних действий при работе с эмулятором Microsoft Azure.

clip_image004

Создайте новую папку node на диске C и перейдите в c:\node:

clip_image006

Введите приведенные ниже команды, чтобы создать решение chatapp и рабочую рольWorkerRole1:

PS C:\node\New-AzureService chatapp

PS C:\node\chatapp Add-AzureNodeWorkerRole

Ответ системы будет следующим:

clip_image008

Загрузите пример чат-клиента

В этом проекте используется  чат-клиент из репозитория Socket.io в GitHub. Загрузите пример и добавьте его в свой проект, как описано ниже.

Щелкните кнопку ZIP для загрузки ZIP-архива проекта.

clip_image010

В Проводнике Windows щелкните правой кнопкой мыши загруженный ZIP-архив и выберите Extract All. Укажите папку для извлечения файлов и затем нажмите Extract. Откроется папка с распакованными файлами.

clip_image012

Перейдите по вложенным папкам к каталогу examples\chat. Скопируйте его содержимое в созданный ранее каталог C:\node\chatapp\WorkerRole1.

clip_image014

После завершения копирования папка WorkerRole1 будет содержать следующие элементы:

clip_image016

В каталоге C:\node\chatapp\WorkerRole1 удалите файл server.js, а затем переименуйте app.js в server.js. Таким образом вы удалите файл server.js, созданный по умолчанию командлетом Add-AzureNodeWorkerRole, и замените его аналогичным файлом чат-клиента.

Измените Server.js и установите модули

Прежде чем протестировать приложение в эмуляторе Microsoft Azure, необходимо внести небольшие изменения. Выполните следующие действия с файлом server.js:

Откройте файл server.js в Блокноте или другом текстовом редакторе.

Измените строку для socket.io, удалив запись «../../lib/» из ее начала. В результате строка должна выглядеть так:

, sio = require('socket.io');

Это гарантирует правильную загрузку библиотеки socket.io из папки node_modules при запуске приложения.

Убедитесь, что приложение слушает правильный порт: для этого откройте server.js в Блокноте или другом текстовом редакторе и замените 3000 на process.env.port в следующей строке:

app.listen(3000, function () {

Затем удалите строку, начинающуюся с console.log, так как она не используется ни в эмуляторе Microsoft Azure, ни в самой системе Microsoft Azure.

Сохраните изменения в server.js и выполнить описанные ниже действия для установки необходимых модулей и тестирования приложения в эмуляторе Microsoft Azure:

Если эмулятор еще не запущен, откройте Microsoft Azure PowerShell. Для этого выберите в меню Start пункты All Programs, Microsoft Azure, щелкните правой кнопкой мыши Microsoft Azure PowerShell и выберите Run As Administrator.

Перейдите в каталог с приложением. Например, это может быть C:\node\chatapp\WorkerRole1.

Чтобы установить модули, необходимые приложению, воспользуйтесь командой npm:

PS C:\node\chatapp\WorkerRole1 npm install

В результате будут установлены модули, указанные в файле package.json. После выполнения команды на экране отобразится примерно следующее:

clip_image018

Этот пример изначально находился в репозитории Socket.io в GitHub и напрямую ссылался на библиотеку Socket.io с помощью относительного пути, поэтому библиотека Socket.io не указана в файле package.json и ее нужно установить с помощью команды:

PS C:\node\chatapp\WorkerRole1 npm install socket.io

Тестирование и развертывание

Запустите эмулятор следующей командой:

PS C:\node\chatapp\WorkerRole1 Start-AzureEmulator -launch

Примечание. Если браузер не откроется автоматически, запустите его вручную и перейдите по адресу, полученному командой Start-AzureEmulator.

Когда браузер запустится, введите свой псевдоним и нажмите клавишу «ВВОД». Так вы сможете публиковать сообщения под определенным именем. Для тестирования многопользовательских функций откройте другие браузеры и введите в них такой же URL, но разные псевдонимы.

clip_image020

После тестирования приложения остановите эмулятор следующей командой:

PS C:\node\chatapp\WorkerRole1 Start-AzureEmulator -launch

Чтобы развернуть приложение в Microsoft Azure, выполните командлет Publish-AzureService. Например:

PS C:\node\chatapp\WorkerRole1 Publish-AzureService -name chatapp -location "North Central US" -launch

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

clip_image021

Когда развертывание завершится, браузер автоматически откроется и перейдет к развернутой службе.

Теперь приложение работает на Microsoft Azure и может передавать сообщения в чате между клиентами при помощи Socket.io.

Заключение и дальнейшие действия

В данном руководстве рассказывалось, как развернуть чат-клиент в рабочей роли Microsoft Azure и обеспечить взаимодействие в режиме реального времени между сервером Node.js и клиентами посредством библиотеки Socket.io.

Дальнейшие действия

Автор статьи: Владимир Юнев.