首页 > 解决方案 > 如何使每个 MQTT Publih 消息在单独的数据包中?

问题描述

我正在制作一个电子票务系统,我使用 MQTT V3.1.1 允许用户打开大门(大门是使用 Raspberry Pi 3 Model B+ 制作的)。

在这种情况下,我想用 10000 条发布消息和每条消息的不同主题(主题范围从 bcn/bcn0000 - bcn/bcn00010000)一次加载测试代理和树莓派,负载为 unix nano 时间戳。测试成功,但是当我尝试在测试期间捕获进入我的 Raspberry Pi 的 MQTT 数据包时,它只捕获不到 10000 个(应该是 10000 个数据包吧?)MQTT 发布消息并且我使用 MQTT QoS 0。代理我使用的是安装在我的 VPS 中的 Mosquitto。

捕获的数据包(使用 TCPDUMP 捕获)在一个 MQTT 数据包中包含 10 多个 MQTT 发布消息。这是由nagle的算法引起的吗?以及如何使每条消息同时发送,每个发布消息都有单独的数据包

编辑:使用golang(paho.mqtt.golang)的服务器端编程和逻辑和使用python(paho.mqtt.python)的树莓派,我将mosquitto.conf上的set_tcp_nodelay设置为true但没有运气

堆叠的 MQTT 在一个 MQTT 数据包上发布消息 在wireshark上查看的树莓派上捕获的数据包列表

标签: tcpmqttmosquittopaho

解决方案


请在 python paho 客户端中使用以下行来禁用 Nagle 算法,该算法不会在一个数据包/帧中发送多条消息

client.connect("0.0.0.0", 1883, 60)  
client.socket().setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)

推荐阅读