Тестируем облачную платформу IBM на примере чата

f827af61e7224974b5c3df356f37c65d.png
Недавно мне довелось познакомиться с техническим специалистом IBM, который рассказал мне о возможностях сравнительно новой платформы IBM Bluemix, которая должна облегчить жизнь разработчика. На примере простенького чата я решил проверить это утверждение.

Предыстория


Ранее мой опыт работы с платформой был близок к нулю, поэтому чтобы разобраться в огромном количестве сервисов платформы, я снова обратился к своему знакомому из IBM. Мне казалось очевидным использовать сервис Message Hub, но в итоге оказалось, что для решения нашей задачи лучше подойдет MQ Light. Основные причины:

  • тариф в бесплатные 10 тысяч сообщений в месяц
  • хорошая масштабируемость
  • простой в использовании API

Так же рассматривали вариант использования сервиса IoT Foundation, но, как оказалось, устройства не могут подписываться на получение любых других событий кроме команд, а отправлять собственно команды они тоже не могут. Получается, отправлять данные мы можем как хотим, а получать только в виде команд.

Итак, перейдем в Dashboard IBM Bluemix.

Регистрируем облачный сервис


Так как для чата нам не потребуется никаких обёрток на стороне сервера, нужно только зарегистрировать сервис и получить данные для подключения.

Заходим в панель, нажимаем «Use services or APIs»:
6b32c4eff6264f3eb67b62e0360097ad.png

Ищем MQ Light:
a542b22bf9ff4f709063ea5f5dc44c73.png

И берём один такой себе.
634e3dd1eb2b4c25807889a60a761ef1.png

Возвращаемся в Dashboard, выбираем MQ Light — Service Credentials. Создаём себе данные для авторизации наших приложений.
fb9ee4b6402a4c8a965530e655fa2a2f.png

Получаем:
f17d8a1a12524f2780a16d9bbf677611.png
Проверьте заранее наличие »;» в логине и пароле. Компилятору оно не очень понравится, лучше сгенерировать новую пару.

Создаём десктопное приложение


Поскольку нам нужно быстро создать рабочее приложение — используем Node.JS и устанавливаем библиотеку MQ Light.

npm install mqlight

… и открываем нашу среду разработки. Первым делом необходимо подключить библиотеку:

var mqlight = require('mqlight');

Теперь, чтобы создать реалтайм чат, нам придётся работать с вводом данных из консоли. Для этого отлично подойдёт стандартная библиотека из набора Node.JS — readline.

var readline = require('readline');

Добавим немного переменных для MQ Light.

var TOPIC = "mqlight/simplechat"; 
var SHARE_ID = "";
var opts = {
  service: 'connectionLookupURI', //Данные из предыдущего этапа
  user: 'username',
  password: 'password'
};

И не забываем про ввод/вывод:

var rl = readline.createInterface(process.stdin, process.stdout);

Далее, при запуске спрашиваем ник и подписываемся на канал с ником в share id:

Скрытый текст
mqlightClient.on('started', function() {
  rl.question("Please, choose your nickname: ", function(result) {
    SHARE_ID = result;
    console.log("Welcome,", SHARE_ID, "!");
    rl.setPrompt(SHARE_ID + '> ');
        
    mqlightClient.subscribe(TOPIC, SHARE_ID, 
    { credit : 5,
      autoConfirm : true,
      qos : 0}, 
    function(err) {
      if (err) console.error("Failed to subscribe: " + err); 
      else {
        console.log("Subscribed to " + TOPIC);
        rl.prompt();
      }
    });
  });
});

И обрабатываем получение сообщения (событие 'message' в MQ Light) и отправку сообщения (ловим событие 'line' в readline):

Скрытый текст
mqlightClient.on('message', function(data, delivery) {
  data = JSON.parse(data);
  if (data.id != SHARE_ID) {
    readline.clearLine(process.stdout, 0);
    rl.setPrompt(data.id + '> ');
    rl.prompt();
    console.log(data.message + '                 ');
    rl.setPrompt(SHARE_ID + '> ');
    rl.prompt();
  }
});

rl.on('line', function(message) {
  if(message != "") {
    var data = JSON.stringify({
      id: SHARE_ID,
      message: message
    });
    mqlightClient.send(TOPIC, data, {
      ttl: 60*60*1000
    });
    rl.prompt();
  }
});

Приложение готово. При запуске оно попытается подключится к серверам IBM, затем спросит ник, и подпишется на канал /mqlight/simplechat с ником в качестве SHARE ID. На всё ушло всего 64 строки! Кажется, весьма неплохой результат для одного вечера.

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


Проверяем, всё ли работает:
8c13650be4e04e01bf02cdf9540f762a.png

Profit! А вот так это выглядит в панели управления:
90a00425d3a0492ebbc4f00fb1442dda.png

Заключение


Теперь о результатах.

  • 64 строчки кода
  • Следуя инструкции на создание чата уйдет 20–30 минут
  • Сервисы платформы сокращают ~40% времени, учитывая, что нужно поднять сервер, написать код для бекэнда
  • Дополнительным плюсом, данные передаются в зашифрованном виде из коробки, с помощью TLS

Итак, мы решили поставленную задачу: создать чат с минимальными затратами ресурсов, всего за один вечер. С помощью IBM Bluemix можно быстро создавать приложения любой сложности, используя множество уже готовых сервисов и API. Что же, облачные технологии развиваются, и в будущем работа программиста может стать гораздо проще и интереснее, а как вы считаете?

© Habrahabr.ru