Mosquitto源码分析及用go语言的重新实现(一、开篇)

Mosquitto简介:

Mosquitto是用C语言实现的MQTT物联网协议v3.1 的消息代理服务器。提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单。

5G时代已经到来,物联网时代,万物互联。未来只有人想不到的,没有做不到的。物联网最近乃至以后都会很火,业余时间计划对Mosquitto源码进行一个研究分析以及用go语言按着Mosquitto的思路去重新实现一遍MQTTv3.1协议,作为一个学习和提高的过程。

Mosquitto源码下载位置:http://mosquitto.org/files/source/

物联网(Internet of Things,IoT)最近曝光率越来越高。虽然HTTP是网页的事实标准,不过机器之间(Machine-to-Machine,M2M)的大规模沟通需要不同的模式:之前的请求/回答(Request/Response)模式不再合适,取而代之的是发布/订阅(Publish/Subscribe)模式。这就是轻量级、可扩展的MQTT(Message Queuing Telemetry Transport)可以施展拳脚的舞台。

MQTT简介:

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

è¿éåå¾çæè¿°

扫描二维码关注公众号,回复: 9367080 查看本文章

mosquitto的安装和使用:

安装过程略,可参照网上博文:常见MQTT服务器搭建与试用https://www.jianshu.com/p/e5cf0c1fd55c

常用客户端测试工具还有:MQTTBox和MQTT.fx

常用MQTT服务器有:EMQTTMosquittoApollo

apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。

或者现成的MQTT服务器,如阿里云,百度云,华为云等公用的云平台提供的MQTT服务。

EMQ是目前开源社区最为流行的MQTT Broker

安装成功后,在终端运行mosquitto_sub --help 或 mosquitto_pub —help获取脚本参数说明:
mosquitto_pub参数说明:
-d  打印debug信息
-f  将指定文件的内容作为发送消息的内容
-h  指定要连接的域名  默认为localhost
-i  指定客户端clientid,默认为附加进程ID的mosquitto_pub_
-I  指定clientId前缀
-m  消息内容
-n  发送一个空(null)消息
-p  连接端口号
-q  指定QoS的值(0,1,2)
-t  指定topic
-u  用户名
-P  用户密码    
-V  指定MQTT协议版本
--will-payload  指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos  Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使 用
--will-topic  用户发送Will消息的topic


mosquitto_sub参数说明
-c  指定客户端clean_session是否保存。
-d  打印debug信息
-h  指定要连接的域名  默认为localhost
-i   指定客户端clientid
-I   指定clientId前缀
-k  keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒.
-q 指定希望接收到QoS为什么的消息  默认QoS为0
-R 不显示陈旧的消息
-t 订阅topic
-v 打印消息
--will-payload  指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
--will-qos  Will的QoS值。该参数需要与--will-topic一起使用
--will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使>用
--will-topic  用户发送Will消息的topic

启动代理服务
mosquitto -v
【-v】打印更多的调试信息

订阅主题
mosquitto_sub -v -t sensor
【-t】指定主题,此处为sensor
【-v】打印更多的调试信息

发布内容
mosquitto_pub -t sensor -m 12
【-t】指定主题
【-m】指定消息内容

mosquitto客户端和服务器运行命令:

[1] 发布者客户端运行命令示例:
./mosquitto_pub -h 127.0.0.1 -p 1883 -t "111" -m "this is a msg" -u root -P 123

[2] 订阅者客户端运行命令示例:
./mosquitto_sub -h 127.0.0.1 -i 111 -p 1883 -t 111 -k 60 -d -c -u root -P 123

[3] mosquitto服务器端运行命令示例:
./mosquitto 

发布了125 篇原创文章 · 获赞 165 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq8864/article/details/89188343
今日推荐