概要
MQTT as a Serviceであるsangoを使ってみました
MQTTとは非常に軽量なメッセージングプロトコルでIoTやM2Mといったコンテキストで最近聞かれるようになりました
技術自体は1999年にスタートしており歴史があります
ここではMQTTに関しては詳しい説明はしませんがWeb上に多くの情報があるので興味のある方は調べてみてください
sangoはMQTTを簡単に使うことができるサービスです
今回はサービスの登録から簡単なメッセージのやり取りができるRubyのサンプルまでを紹介します
環境
- Mac OX X 10.8.5
- Ruby 2.1.2p95 (クライアント)
- ruby-mqtt 0.3.1 (クライアント)
- sango 2015/1/15時点
サービス登録
まずはサービスサイトにアクセスします
アクセスすると「新規登録/ログイン」というボタンがあるのでクリックします
するとGithubアカウントでサインアップするように求められるのでGithubのアカウントを使ってサインアップします
(当たり前ですがGithubアカウントがない場合は作成しておいてください)
ログインするとsangoのダッシュボードにアクセスします
アクセスするとMQTTのbroker(サーバ)情報が表示されていると思います
これでもうMQTTを使うための準備は整いました
トピックとかWebSocketとかいろいろと気になるワードもありますがまずは使ってみます
サンプルクライアントの作成と実行
gemのインストール
gem コマンドでインストールします
gem install mqtt
無事インストールできればOKです
サンプルクライアント
pub_sango.rbとsub_sango.rbという2つのスクリプトを作成します
publish(メッセージ送信)をpub_sango.rbで実行しsubscribe(メッセージ受信)をsub_sango.rbで実行します
まずはサンプル全体です
- pub_sango.rb
require 'mqtt'
MQTT::Client.connect(
:host => 'lite.mqtt.shiguredo.jp',
:port => 1883,
:username => 'Please input your username',
:password => 'Please input your password') do |c|
c.publish('Please input your topic', 'message')
end
- sub_sango.rb
require 'mqtt'
MQTT::Client.connect(
:host => 'lite.mqtt.shiguredo.jp',
:port => 1883,
:username => 'Please input your username',
:password => 'Please input your password') do |c|
# If you pass a block to the get method, then it will loop
c.get('Please input your topic') do |topic,message|
puts "#{topic}: #{message}"
end
end
ポイントを説明します
sangoへの接続
まずsangoにコネクションするときに「host」「port」「username」「password」を指定する必要があります
これらはsangoのダッシュボードで確認することができ、それぞれ
- host・・・ダッシュボードの接続先のホスト名の部分を入力
- port・・・ダッシュボードの接続先のポート部分を入力
- username・・・ダッシュボードのユーザー名を入力
- password・・・ダッシュボードのパスワードを入力(パスワードを表示するには鍵マークをクリックします)
を入力すればOKです、サンプルコード中の情報はダミーなので適宜、ダッシュボードの値に変更してください
これらの情報はpublisherとsubscriberそれぞれのスクリプトで入力する必要があります
usernameとpasswordに関してはすべてのbrokerで必要というわけではありません、sangoに関してはパスワード認証でセキュリティを高めている感じです
トピックの指定
トピックとはメッセージを保存しておくための器のようなものでメッセージを送受信する際はトピックを指定します
今回はpublish
メソッドとget
メソッドの引数にトピックを指定する必要があります
指定するべきトピックの情報もsangoのダッシュボードで確認することができ「アクセス先トピック」の部分を入力してください
トピックの指定にはワイルドカードが存在し「#」を指定するとすべてのトピックという意味になります
おそらくsangoのダッシュボードで確認できるトピック名は「username/#」と言う表示になっており、これを指定するとすべてのトピックに対してメッセージを送受信することになります
「#」の部分は好きな文字列に変更することができます
例えば「username/test」という風にpublish
メソッドの引数に指定すれば「username/test」という1つのトピックにだけメッセージが送信されることになります
もちろんget
メソッドの引数にも同じトピックを指定しないと送信したメッセージを受信することができません
こんな感じで「#」の部分は好きなトピックを指定してあげてください
サンプルの実行
必要な情報を入力したらサンプルを実行してみましょう
ターミナルを2つ起動しておいてください
まずはsub_sango.rbを先に実行しておきます
するとメッセージの待機状態に入ります
ruby sub_sango.rb
この状態でpub_sango.rbを実行してみましょう
ruby pub_sango.rb
するとsub_sango.rb側で待機していたコンソールにpublishしたメッセージが表示されると思います
更にpub_sango.rbを実行するとまた送信したメッセージが表示されると思います
このようにsubscriberは実行されると常に接続状態となり、publisherからのメッセージの送信を常に待機しています
ちなみにこの状態でsangoのダッシュボードを確認するとコネクション数が1/6になっていることを確認できると思います
超簡単ではありますが今回のサンプルは以上です
今回はWillやRetainといったメッセージングに特化した機能に関しては全く触れませんでしたがMQTTにはメッセージングに特化したシンプルで強力な機能がたくさんあります
そのあたりWebにいろいろと情報があると思いますので興味のある方は調べてみるといいと思います
0 件のコメント:
コメントを投稿