MQTT始终连接并加载4G数据


10

我正在从事一个涉及数千个MQTT客户端的物联网项目,这些客户端通过4G / WiFi路由器/调制解调器连接到代理(mosquitto)。少于10个客户端连接到同一路由器,并且这些路由器来自不同的地方(不同的城市)。

目前,我们的客户很少,他们总是与经纪人保持联系。通过这次讨论,我知道即使它们增长到1000多个单位也不会有问题。

我的问题是关于4G连接的流量负载。最终用户担心在打开并不使用所有“通道”的情况下会消耗数据。 据我了解,当没有活动时,仅发送保持活动数据包,尽管我无法在MQTT文档中找到此信息。

当没有数据包发布时,我可以假设流量可以忽略不计吗?

Answers:


6

MQTT规范列出了构成保持活动事务的PINGREQPINGRESP数据包的详细信息。

每个字节只有2个字节,因此一个完整的keep-alive事件总共使用4个字节。由于您可以根据需要知道连接断开的速度来控制每个客户端发送保持活动数据包的频率,因此您可以完全控制没有实际发布消息时使用了多少数据。

如果您想进一步减少数据负载,则可以在10个设备所连接的4G路由器之前将单独的代理运行,然后将其桥接到中央代理。这样可以将保持活动数据包的数量减少到每个4G路由器1个,而不是每个客户端1个。这样做的好处是,如果链接断开,则10个本地设备可以继续在彼此之间传递消息,并且您可以使用保留的消息/最后的遗嘱和遗嘱消息来跟踪各个客户端何时断开。


使用中间经纪人是一个很好的建议,即使我担心它也不适合这种特定情况。有用,但是!
马克

无论如何,我知道PINGREQ / RESP的行为,但是我没有发现的是,它们是在没有实际活动(即由用户应用程序启动)时交换的唯一数据包。我可以从您的答案中推断出这一点,但文档似乎并未明确指出。
马克

每次接收到数据包时,都会重置“保持活动状态”计时器,我不记得在规范中这是什么意思了
hardillb

2
只是想指出,如果我们不谈论每条消息2个字节,但引入本地代理的建议更有意义,但是由于TCP / IP,它更像每个消息42个字节,因此它在一个ping周期中为84个字节。
xwoker

1
@马克,只有Ping报文是如果没有消息被发送通过该表后的句子隐含发送的唯一的事实:docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/...
hardillb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.