电子说
一、MQTT通信协议和工具包简介
1、MQTT通信等定义:
消息队列遥测传输 ( 英语:Message Queuing Telemetry Transport , MQTT )是 ISO 标准 (ISO/IEC PRF 20922) 下基于 发布(Publish)/订阅(Subscribe) 范式的消息协议,可 视为“资 料 传递 的 桥梁” 。----摘录维基百科
2、MQTT通讯示意图
上图是MQTT的实际使用案例
将上图简化后的系统结构图如下图:
3、MQTT系统组成
系统包含两个部分:
客户端(Client):需要发布或订阅消息的终端,可以是智能终端,传感器,或者是数据库,主要功能如下:
(1)发布其他客户端需要订阅的信息;
(2)订阅其它客户端发布的消息;
(3)退订或删除应用程序的消息;
(4)断开与服务器连接。
服务器:(Server/Broker):专门用于进行设备注册和消息转发,称为"消息代理"(Broker),具体有如下功能:
(1)接受来自客户的网络连接;
(2)接受客户发布的应用信息;
(3)处理来自客户端的订阅和退订请求;
(4)向订阅的客户转发应用程序消息。
4、MQTT通信方式:
Client之间的通讯可以是一对一,一对N,也可以是N对一。
二、MQTT通信范例
1、MQTT通讯底层方式
范例提供了2种通讯方式,TCP/IP和websocket,底层都是TCP/IP,不过websocket是对TCP/IP的封装。
2、MQTT所需工具包
具体安装包如下图,在VIPM里面安装相应的工具包和附加工具包,共享的代码也包含离线安装包。
上面工具包里包含了Client和Broker,通过依赖注入的形式,改变通信类型,提供的范例是TCP/IP和websocket两套通信模式。
其中还可以使用通用的mqtt 调试软件mosquito调试TCP/IP,但是这个不能调试websocket客户端。打开命令为 mosquito -d -v.这个调试工具在代码的共享,也可到网上下载。
三、MQTT通信范例
1、软件扩展
为了监听底层通信报文,在项目中创建了两个类TCP Pro和WebSocket Pro分别继承Connect Tcp和WebSocketsConnect,分别添加一个Name属性并重写Read incoming Bytes和Write Incoming Biytes,使用了我上一章介绍的工具,Consol FGV对实时报文进行监控。
重写读者类,监听报文
重写后通信接口UML关系图:
2、为客户端添加自动断开后自动停止事件,这里将库里的私有方法设置成公共方法,然后使用Close Seccion事件来自动停止,如果不想改变工具包,可以删除相应的代码不影响整体功能。
将私有文件夹设置乘公共文件夹
3、TCP MQTT范例演示
注意先启动服务器再启动客户端
启动Broker
启动Clent1
启动Clent2
服务端可以看到已经启动了两个客户端。
发布V1消息,订阅消息V2
发布V2消息,订阅消息V1
同时订阅V1,V2两个消息
可以自行尝试下取消订阅相关消息
4、websocket MQTT范例演示
注意先启动服务器再启动客户端
启动client1
启动client2
websocket Broker
可以尝试订阅和取消订阅相关消息
5、练习:
是否可以使用这个工具包,开发一个建议的局域网聊天软件,这样可以更好的学习这个工具包的用法:)。
四、MQTT通讯原理简介
1、MQTT启动和连接
1.1、首先启动服务器,服务器启动后会启动一个异步线程监听是否有客户端连接到服务器端口
1.2、启动客户端,链接到服务器后向服务发送链接信息,服务端检测服务信息正确后返回连接信息,如果不正确就会断开连接。
1.3、客户端长期没有给服务发数据时需要向服务器发送心跳消息,如果不发送超时,服务器会断开客户端。
LabVIEW的范例中的服务器没有这个功能,mosquito服务器有这个功能,需要了解的读者可以自行尝试
2、MQTT通信方式
1.1、客户端需要某个主题A消息时向服务器订阅主题A,当客户端0向服务器发送主题A时,订阅了主题A的客户端都会收到客户端0的主题,没有订阅的客户端不会收到主题A。
1.2、当某个客户端不需要主题A时可取消订阅主题A。
五、需要安装的软件、工具包和库
1、LabVIEW2015中文版
2、mqtt工具包集合
3、mosquitto服务器安装包
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !