MQTTとはなんぞや、という自分が実際に動かしながら学んだ方法です。
オプション的(retain,qos等)なものは一切削いでシンプルに。
基本sampleコードをベースに、改造しながらMilkcocoaとの連携まで実施しました。
MQTTとは
MQTT(Message Queue Telemetry Transport)は1999年にIBM社と Eurotech社のメンバーにより考案されたプロトコルで、2014年8⽉現在 における最新のバージョンはMQTT3.1.1です。現在、コンピュータと通 信に関する標準化団体であるOASISによって、MQTTの標準化が進められています。 https://sango.shiguredo.jp/mqtt
- 軽量・省電⼒なプロトコル
- 低速・不安定なネットワークでの利⽤を想定
sample code
まずは、mqttのサイトにもあるサンプルコードを手元で動かしてみる。
sample.js
コードはこちら
mqtt_samples/sample.js
node sample.js
すると
Hello mqtt
こんなレスポンスが返ってきます。
これが、どういう状態か。図がこちら。
このように、自身(PC)がpubして自身(PC)でsubして(受けて)いるので、ちょっと分かりにくいです。
なので、このsample.js
を少し改変します。
publishとsubscribeでプログラムを分ける
publishとsubscribeでプログラムを分けてみました。
pub_test.js
https://github.com/papettoTV/mqtt_samples/blob/master/pub_test.js
sub_test.js
https://github.com/papettoTV/mqtt_samples/blob/master/sub_test.js
これらの実行はコツが必要で、先にsub_test.js
を実行し、直後に別プロセスでpub_test.js
を実行します。
node sub_test.js
これを実行すると、待ちの状態になります。
で、直後に別ターミナルで、
node pub_test.js
を叩くと、sub_test.js
側に以下の様な出力がでます。
Hello mac
これの概要図がこちら
処理フローは
* sub_test.jsを実行し、brokerにpresenceというトピックを登録
* pub_test.jsで、presenceトピックに対してHello mac
という情報を投げる
* brokerが、同トピックで待ってるsubscriber(sub_test.jsの実行者)に対して、Hello mac
を投げる、という動きになります。
これで、publisher、subscriberの関係の理解が深まりました。
もっと現実的にするなら、このpubとsubを別端末で実施するといいかもしれません。
brokerを変えてみる
sampleコード内で、以下の部分は、brokerサーバを指定しています。
var client = mqtt.connect('mqtt://test.mosquitto.org');
このtest.mosquitto.orgはオープンソースなbrokerサーバですね。
なので、これを試しに別brokerサービスに変えてみます。
Milkcocoa
Milkcocoaというリアルタイムなサービス向けBaaSがありますが、こちらはbrokerとしての機能も備えていますので、これに置き換えてみます。
それがこちら
milkcocoa_pub_sample.js
コード内のapp_idはMilkcocoaに登録して取得したものを書きます。
publisher側のコードなので、pub_test.js
と比べて、基本的には、mqtt.connect()
内のパラメータが変わっただけです。
※subscribe側もsub_test.jsで、mqtt.connectを変えれば同じです。
結果は同じなので省略しますが、これで、publisher、subscriber、brokerの関係が理解できました。
参考
社内で使った資料