实例:使用MQTT进行交互

实例:使用MQTT进行交互,第1张

最近在着手研究使用网页控制硬件的交互过程,发现mqtt协议有很多种语言的封装,整个思路也很清晰,就是一个客户端进行发布和订阅+服务器中间代理的过程,于是开始学习使用MQTT框架搭建交互平台。
客户端使用了MQTTjs,服务器使用mosca(基于nodejs)。

QoS在MQTT中有(摘自 MQ 遥测传输 (MQTT) V31 协议规范 ):

MQTTjs只是支持了MQTT协议,并没有支持QoS,也就是说,只支持最低级别的“至多一次”(QoS0)。

在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成。
这里只了解消息体,固定头和可变头并不需要我们手动写。
payload消息体包含CONNECT、SUBSCRIBE、SUBACK、UNSUBSCRIBE四种类型的消息:

(1)Connect    与服务器建立连接。
(2)Disconnect    与服务器断开TCP/IP会话。
(3)Subscribe    订阅。
(4)UnSubscribe    取消订阅。
(5)Publish    发送消息请求,发送完成后返回应用程序线程。
二、实现(具体的API稍后呈现)

MQTT不存在上传和下发的定义,只有以topic为单位的推送和订阅。你的情况描述是服务器能看到推送的消息,说明网络、broker配置没有问题,要保证“服务器下发给客户端”能顺利实现的话请确认以下几点:

服务器端推送到的topic和客户端订阅的topic是一致的

本地设备开启了1883端口(或者你自定义的端口号),防火墙没有拦截

如果是自己写代码的话,客户端的on message回调函数里解析报文的逻辑是正确

      用户在使用CAT1模组MQTT协议对接自己的服务器,有时会遇到设备无法连接服务器问题(比如提示+ECMTCON:0,0,5连接服务器被拒绝,认证失败)。此时可以通过 标准的MQTT服务器 进行对比,因为用户自己的服务器一般加入校验信息,导致模组&MQTT服务器无法连接。

       Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本31和311,这里使用该服务器进行测试。针对该服务器更详细的介绍也可以参考 >1Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
2MQTT协议是应用层协议不依赖长连接,适合弱网络。通过topic缓存信息。符合物联网设备的使用场景。因为通过topic缓存信息,因此可以实现通过topic与多个端的一对多连接,而不是设备与设备的多对多连接,节省了能耗及带宽。
MQTT的心跳,及非信息的报文,较Websocket更少,更节省带宽及能耗。更适用于物理网的多种网络协议。
3WebSocket和>

简单回答一下,MQTT(MQTelemetryTransport)是针对物联网而设计的,如手机对家里的智能开关,而WebSocket是针对浏览器与服务器之间而设计的两者基本上是两个世界的东西

MQTT只是一个接口,让两个"物件"能够透过TCP协议通讯,但并没有规定(在应用层面上)通讯中要怎样"对答",如pop3邮件伺服器会有:

S:220我是xxx服务器

C:HELOmyServer

S:250Nicetomeetyou

C:authlogin

这些是没有硬性被定义的,两个"物件"之间要怎_"聊天",由你自己来定

WebSocket则是一个>

以上,只是很概念的说法,便於你理解,详细你得自己翻下文献了

首先需要搭建MQTT服务器,然后搭建MySQL数据库,然后使用海为组态写段程序,最后配置客户端验证即可。具体可以参考内容 Haiwell(海为)HMI/CBOX/IPC MQTT 配置应用教程 网页链接

mqtt与服务器建立连接。会使用到一个clientid(客户端id)。如果生产者和消费者使用的是同一个clientid的话,那么恭喜你该成不一样的就好了

原因是生产者和消费者是单独连接服务器的,也就是说与服务区有两个连接一个是生产者的连接一个是消费者的连接


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/12807028.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-27
下一篇2025-08-27

发表评论

登录后才能评论

评论列表(0条)

    保存