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

2020-08-04 10:28:59 浏览数 (1)

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)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。

mosquitto的安装和使用:

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

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

常用MQTT服务器有:EMQTT,Mosquitto,Apollo

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

0 人点赞