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.

なんだろこれ。