Недавно мне довелось познакомиться с техническим специалистом IBM, который рассказал мне о возможностях сравнительно новой платформы IBM Bluemix, которая должна облегчить жизнь разработчика. На примере простенького чата я решил проверить это утверждение.
Предыстория
Ранее мой опыт работы с платформой был близок к нулю, поэтому чтобы разобраться в огромном количестве сервисов платформы, я снова обратился к своему знакомому из IBM. Мне казалось очевидным использовать сервис Message Hub, но в итоге оказалось, что для решения нашей задачи лучше подойдет MQ Light. Основные причины:
- тариф в бесплатные 10 тысяч сообщений в месяц
- хорошая масштабируемость
- простой в использовании API
Так же рассматривали вариант использования сервиса IoT Foundation, но, как оказалось, устройства не могут подписываться на получение любых других событий кроме команд, а отправлять собственно команды они тоже не могут. Получается, отправлять данные мы можем как хотим, а получать только в виде команд.
Итак, перейдем в Dashboard IBM Bluemix.
Регистрируем облачный сервис
Так как для чата нам не потребуется никаких обёрток на стороне сервера, нужно только зарегистрировать сервис и получить данные для подключения.
Заходим в панель, нажимаем “Use services or APIs”:
Ищем MQ Light:
И берём один такой себе.
Возвращаемся в Dashboard, выбираем MQ Light – Service Credentials. Создаём себе данные для авторизации наших приложений.
Получаем:
Проверьте заранее наличие “;” в логине и пароле. Компилятору оно не очень понравится, лучше сгенерировать новую пару.
Создаём десктопное приложение
Поскольку нам нужно быстро создать рабочее приложение – используем 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 строки! Кажется, весьма неплохой результат для одного вечера.
Тестирование
Проверяем, всё ли работает:
Profit! А вот так это выглядит в панели управления:
Заключение
Теперь о результатах.
- 64 строчки кода
- Следуя инструкции на создание чата уйдет 20-30 минут
- Сервисы платформы сокращают ~40% времени, учитывая, что нужно поднять сервер, написать код для бекэнда
- Дополнительным плюсом, данные передаются в зашифрованном виде из коробки, с помощью TLS
Итак, мы решили поставленную задачу: создать чат с минимальными затратами ресурсов, всего за один вечер. С помощью IBM Bluemix можно быстро создавать приложения любой сложности, используя множество уже готовых сервисов и API. Что же, облачные технологии развиваются, и в будущем работа программиста может стать гораздо проще и интереснее, а как вы считаете?
SOLON7
кроме чата, какие еще функции есть из коробки?
Moon_darker
Из коробки MQ Light позволяет создавать каналы (топики) и обмениваться в них данными по защищённому (или не защищённому, на ваше усмотрение) соединению. С этим вы можете делать абсолютно всё, что хотите, чат я сделал просто потому, что это очень простой пример :)
Levhav
А помимо каналов что то ещё есть? Может бд или какие то ещё возможности. Просто облачных комет сервисов не так уж и мало, что может этот такого чего не умеет pusher.com или parse.com или comet-server.ru?
Moon_darker
Конкретно MQ Light разработан не совсем для этих целей, но в наборе IBM Bluemix есть куча различных инструментов. Я узнал об этой платформе относительно недавно, поэтому ничего конкретного про сервисы кроме MQ Light сказать не могу, но вы можете ознакомиться со списком сервисов в панели управления Bluemix (регистрация необязательна, конечно же).
millstone
Если говорить об MQ Light, то это просто реализация AMQP, т.е. все достаточно низкоуровневое. Если нужно больше готовых «плюшек» — push, awareness и т.п., в Блюмиксе есть PubNub. Но с ним статья получится совсем не интересной, поскольку код писать вообще не придется )