
客户端使用了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稍后呈现)1Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
2MQTT协议是应用层协议不依赖长连接,适合弱网络。通过topic缓存信息。符合物联网设备的使用场景。因为通过topic缓存信息,因此可以实现通过topic与多个端的一对多连接,而不是设备与设备的多对多连接,节省了能耗及带宽。
MQTT的心跳,及非信息的报文,较Websocket更少,更节省带宽及能耗。更适用于物理网的多种网络协议。
3WebSocket和>在使用 MQTT 协议连接 MQTT 服务器时,可能会遇到连接失败的情况。这通常是由于以下几个原因之一:
服务器配置错误:确保您的 MQTT 服务器已经正确配置,并且已经启动。您可以检查 MQTT 服务器的配置文件,确保 MQTT 服务器的端口号、认证方式、消息格式等参数都正确。
客户端配置错误:确保您的客户端已经正确配置,并且已经启动。您可以检查 MQTT 客户端的配置文件,确保 MQTT 客户端的 URL、端口号、认证方式、消息格式等参数都正确。
网络问题:确保您的网络连接正常,并且可以访问 MQTT 服务器。如果您的网络连接不稳定或者无法访问 MQTT 服务器,可能会导致连接失败。
配置文件错误:确保您的配置文件没有错误。如果您的配置文件中有错误或者不正确的参数,可能会导致连接失败。
如果您已经确保了以上几个方面都没有问题,但是仍然无法连接到 MQTT 服务器,您可以尝试以下几个步骤:
检查 MQTT 服务器的配置文件:确保您的 MQTT 服务器的配置文件没有错误。如果您的配置文件中有错误或者不正确的参数,可能会导致连接失败。
检查 MQTT 客户端的配置文件:确保您的 MQTT 客户端的配置文件没有错误。如果您的配置文件中有错误或者不正确的参数,可能会导致连接失败。
检查网络连接:确保您的网络连接正常,并且可以访问 MQTT 服务器。如果您的网络连接不稳定或者无法访问 MQTT 服务器,可能会导致连接失败。
检查 MQTT 服务器的状态:确保您的 MQTT 服务器已经正确启动,并且可以正常工作。如果您的 MQTT 服务器出现了故障,可能会导致连接失败。
如果以上步骤都没有解决问题,您可以尝试查看 MQTT 服务器的日志,以了解更多有关连接失败的信息。同时,您也可以尝试使用其他的 MQTT 客户端或者其他的 MQTT 服务器来连接,以确保您的连接是正常的。 用户在使用CAT1模组MQTT协议对接自己的服务器,有时会遇到设备无法连接服务器问题(比如提示+ECMTCON:0,0,5连接服务器被拒绝,认证失败)。此时可以通过 标准的MQTT服务器 进行对比,因为用户自己的服务器一般加入校验信息,导致模组&MQTT服务器无法连接。
Eclipse Mosquitto是一个开源消息代理,实现了MQTT协议版本31和311,这里使用该服务器进行测试。针对该服务器更详细的介绍也可以参考 >
broker的主要职责是接受发布者发布的所有消息,并将其过滤后分发给不同的消息订阅者。
如今有很多的broker,下面就是一张关于各种broker对比的:
目前我用过的有mosquitto和emqttd(20版本后改叫EMQ),因为目前的需求是希望做每秒10万以上的数据接入,所以需要考虑建立集群。但是在使用mosquitto的过程中发现他不支持集群,所以就放弃了,转投emqttd。
在使用mosquitto过程中发现了一些问题:
在使用mosquitto时,如果想使用集群的话,可能会需要进行二次开发。目前只支持桥接。并且他在遍历时的效率非常低,使得他无法支持大量的客户端或者 *** 作过于频繁的 *** 作(比如十万或百万级别的客户端同时发送数据)
emqttd有以下优点:
EMQ 20 (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源 MQTT 消息服务器。(抄自 EMQ官方文档 )
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)