tcp - 如何使每个 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但没有运气
解决方案
请在 python paho 客户端中使用以下行来禁用 Nagle 算法,该算法不会在一个数据包/帧中发送多条消息
client.connect("0.0.0.0", 1883, 60)
client.socket().setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)
推荐阅读
- php - Incorrect encoding during PHP - MySQL interaction
- julia - How to select odd numbers from a matrix?
- php - My auth register is not submitting to database after i modiy it in laravel 5.8
- android - How to obfuscate android library without compilation
- flutter - How to ignore scrolling inside a container when there are many containers inside a ListView?
- powershell - Get all Groups of a user/group recursively
- android - 将 androidx.lifecycle.Observer 替换为 "it"
- angular - Angular 8 - 抽象服务的单元测试
- xslt - Latex中表格单元格内的自动分页符
- javascript - 如何修复在 React Native 中找不到 util?