【Joytag 香蕉派】Mosquitto, mosquitto-clients 初接触

原文信息

标题:【Joytag 香蕉派】Mosquitto, mosquitto-clients 初接触
连接:http://forum.godpub.com/thread-122-1-1.html
备注:狗趴论坛首发,转载请注明出处。

**简介

**上篇文章《【Joytag 香蕉派】在香蕉派M3上安装和使用Mosquitto》中我们探讨了如何在香蕉派M3上安装Mosquitto, mosquitto-clients. 本文将对如何使用做一个简单的了解。

关于MQTT

如果你清楚MQTT是啥,那么可以参考如下两个链接
https://en.wikipedia.org/wiki/MQTT
http://mqtt.org/faq
笔者英语水平有限,就不献丑翻译,误导大家啦。

消息代理(Broker): 作为服务器接受订阅、处理和分发消息。
客户端(Client): 订阅消息、发布消息。

本地测试

(一) 启动Broker

本例中我们使用Mosquitto作为Broker, 参考前文, 启动mosquitto:

mosquitto -c /etc/mosquitto/mosquitto.conf -d

(二) 订阅消息

mosquitto-clients中,包含两个工具
mosquitto_sub,用于订阅消息
mosquitto_pub,用于发布消息

我们使用mosquitto_sub订阅一个主题下的消息

mosquitto_sub -v -t "topic/joytag/bananapi" -h localhost &

(三) 发布消息

我们使用mosquitto_pub发布一条新消息

mosquitto_pub -t "topic/joytag/bananapi" -m "Hello Joytag BPI" -h localhost

现在我们就可以在终端收到我们发送的消息喽。

topic/joytag/bananapi Hello Joytag BPI

上述例子,我们在一个终端窗口下使用如下例子,但实际上消息从发布者-》Broker-》订阅者。
所以我们可以开启两个终端(可以是不同的用户),一个作为订阅者,一个作为发布者,来观察消息的传递情况。

局域网内测试

我们可以在局域网内使用三台设备来进行如下测试:
设备1:作为Broker
设备2:作为订阅者
设备3:作为发布者

与之前测试的区别在于,我们需要在订阅和发布命令中之指定Broker的地址。
在我的局域网中,使用香蕉派M3作为Broker,局域网IP地址为192.168.249.82

所以,我们分别在三台设备上执行如下命令:

设备一:启动mosquittoBroker

mosquitto -c /etc/mosquitto/mosquitto.conf -d

设备二:订阅主题

mosquitto_sub -v -t "topic/joytag/bananapi" -h 192.168.249.82 &

设备三:发布消息

mosquitto_pub -t "topic/joytag/bananapi" -m "Hello Joytag BPI" -h 192.168.249.82

发布成功后我们可以在设备二上收到上述消息。

公网测试

在公网上我们测试订阅和发布消息,来进一步理解MQTT的消息传递机制。
由于将香蕉派M3放到公网上涉及DDNS以及NAT等,本例暂不做讨论。

我们使用eclipse提供的sandbox,详情参考:
http://iot.eclipse.org/getting-started#sandboxes

设备二:订阅主题

mosquitto_sub -v -t "topic/joytag/bananapi" -h iot.eclipse.org &

设备三:发布消息

mosquitto_pub -t "topic/joytag/bananapi" -m "Hello Joytag BPI" -h iot.eclipse.org

与我们上述例子的区别就在于-h后的地址使用iot.eclipse.org

发现的问题

在之后的一系列测试中,我们发现在(iot.eclipse.org)的订阅连接,每两秒就被踢出,需要对其进行判断并进行重连。
(通过esp8266 arduino MQTT client测试发现)
估计是为了保证所有测试者可以正常连接,eclipse煞费苦心啊。

我在Amazon的ec2上安装了Mosquitto,测试发现并不存在此问题。
如果使用esp8266 arduino MQTT client,以及如何在Amazon的ec2上安装了Mosquitto,就不在本文讨论了。

更进一步

如果想了解mosquitto_sub, mosquitto_pub的更深入用法,请参考对应手册。

man mosquitto_sub
man mosquitto_pub

总结

本文简单介绍了Mosquitto,mosquitto_sub, mosquitto_pub的使用,分别在同一台主机上,局域网内,以及公共网(Internet)上进行了测试。
并介绍了eclipse提供的sandbox。
谨以本文抛砖引玉,希望大家折腾出更好玩的东西。

后续更多精彩内容,请关注狗趴论坛:http://www.godpub.com

:2_31:

支持一下