狗趴(GodPub),开源硬件学习与实践
标题:
【Joytag 香蕉派】Mosquitto, mosquitto-clients 初接触
[打印本页]
作者:
卓泰科技
时间:
2016-6-5 18:09
标题:
【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
欢迎光临 狗趴(GodPub),开源硬件学习与实践 (http://forum.godpub.com/)
Powered by Discuz! X3.2