この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
丹内です。
何かと話題のMQTTですが、今回はブラウザから気軽に使ってみます。
ライブラリはPahoを使います。
ブローカーには、test.mosquitto.orgを使います。
準備
公式ページのインストール方法だとmvnでビルドしてcpという一手間がかかるので、必要となるライブラリを直接コピペするのがオススメです。
このスクリプトをrailsアプリのapp/assets/javascripts/以下に置きます。
ブラウザからはMQTT3.1 over WebSocketを使うことになるので、mqttws31.jsというファイル名が良いと思います。
それと、publishするクライアントとして使うので、mosquittoをインストールしましょう。
$ brew install mosquitto
使ってみる
railsアプリを起動しブラウザでlocalhost:3000にアクセスします。
Chromeのjavascriptコンソールから、以下のように使ってみます。
client = new Paho.MQTT.Client("test.mosquitto.org", 8080, "/", "12345")
#=> P…o.M…T.Client {}_getClientId: () {...}
client.connect({onSuccess:function(){console.log("success")}, onFailure:function(){console.log("fail")}})
#=> undefined
#=> success <---- 接続に成功したら出力されます
client.subscribe('testtopic/a',{onSuccess:function(){console.log("success")}, onFailure:function(){console.log("fail")}})
#=> undefined
#=> success <---- 購読に成功したら出力されます
client.onMessageArrived = function(message){console.log(message.payloadString)}
#=> function client.onMessageArrived(message)
これで接続とsubscribeできたので、コマンドラインからpublishしてみます。
$ mosquitto_pub -h test.mosquitto.org -p 1883 -t testtopic/a -m hello -q 0 -d
Client mosqpub/38372-HL00096.l sending CONNECT
Client mosqpub/38372-HL00096.l received CONNACK
Client mosqpub/38372-HL00096.l sending PUBLISH (d0, q0, r0, m1, 'testtopic/a', ... (8 bytes))
Client mosqpub/38372-HL00096.l sending DISCONNECT
すると、ブラウザにはメッセージが表示されます。
また、接続状態を維持すると、以下のようにHeartbeatのやりとりをしていることがわかります。
まとめ
ライブラリやMQTTの概要、MQTT over Websocketなどが分かれば、かなり簡単にMQTTを応用できそうです。
ハードウェアを強く意識したプロトコルですが、まずはブラウザから使ってみるのが手軽で良いと思います。
参考URL
JsDoc Reference - Paho.MQTT.Client Paho Javascript Client sangoの使い方 - JavaScript WebSocket 編 The Mosquitto MQTT broker gets Websockets support