Mosquitto を試してみる
ほぼ [twitter:@voluntas] さんが書かれた MQTT コトハジメ と Mac OS X に Mosquitto をビルドする - Qiita の通り。
$ curl -O http://mosquitto.org/files/source/mosquitto-1.2.3.tar.gz $ tar xvfz mosquitto-1.2.3.tar.gz $ cmake $ make all
インストールはせず、バイナリを起動だけしてみる。
$ cd src $ ./mosquitto 1394187979: mosquitto version 1.2.3 (build date 2014-03-07 15:41:07+0900) starting 1394187979: Using default config. 1394187979: Opening ipv4 listen socket on port 1883. 1394187979: Opening ipv6 listen socket on port 1883.
pub.py と sub.py
[twitter:@voluntas] さんが書いたのをコピー。
あ、Python3 でもちゃんと動いた。
$ pip install paho-mqtt
sub.py
# -*- coding: utf-8 -*- import paho.mqtt.client as paho def on_connect(mqttc, obj, rc): #mqttc.subscribe("$SYS/#", 0) print("rc: "+str(rc)) def on_message(mqttc, obj, msg): print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload)) def on_publish(mqttc, obj, mid): print("mid: "+str(mid)) def on_subscribe(mqttc, obj, mid, granted_qos): print("Subscribed: "+str(mid)+" "+str(granted_qos)) def on_log(mqttc, obj, level, string): print(string) if __name__ == '__main__': mqttc = paho.Client() mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_subscribe = on_subscribe mqttc.connect("localhost", 1883, 60) mqttc.subscribe("my/topic/string", 0) mqttc.loop_forever()
pub.py
import paho.mqtt.client as paho def on_connect(mqttc, obj, rc): #mqttc.subscribe("$SYS/#", 0) print("rc: "+str(rc)) def on_message(mqttc, obj, msg): print(msg.topic+" "+str(msg.qos)+" "+str(msg.payload)) def on_publish(mqttc, obj, mid): print("mid: "+str(mid)) def on_log(mqttc, obj, level, string): print(string) if __name__ == '__main__': mqttc = paho.Client() mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish mqttc.connect("localhost", 1883, 60) mqttc.publish("my/topic/string", "hello world", 1)
実行する。
$ python sub.py rc: 0 Subscribed: 1 (0,)
sub.py をブローカーに接続したら、以下の様に出た。
1394188158: New connection from ::1 on port 1883. 1394188158: New client connected from ::1 as paho/8C989768D40DE7F7D2 (c1, k60).
Publisher を起動すると Subscriber に以下のように出た。
my/topic/string 0 b'hello world'
Publisher から Subscriber に通信できた。
トピックを my/topic/foo にして送信してみたら、Subscriber には送信されない。
気になる点
Publisher がブローカーに送信した際に以下のメッセージが出る。
1394188592: New client connected from ::1 as paho/EDA65D0D6E0896539C (c1, k60). 1394188592: Socket read error on client paho/EDA65D0D6E0896539C, disconnecting.
なんだろこれ。