在这种情况下,我想一次用unix nano时间戳的有效负载对10000个发布消息和每个消息的不同主题(主题范围从bcn / bcn0000-bcn / bcn00010000)进行负载测试代理和树莓派。测试成功,但是当我尝试捕获在测试期间进入Raspberry Pi的MQTT数据包时,它仅捕获不到10000个数据(应该是10000个数据包吧?)MQTT发布消息,并且我使用MQTT QoS 0。我使用的是在我的VPS中安装的Mosquitto。
捕获的数据包(使用TCPDUMP捕获)在一个MQTT数据包中具有10个以上的MQTT发布消息。这是由nagle的算法引起的吗?以及如何使每个消息在同一时间发送,并且每个发布消息都有单独的数据包
编辑:使用golang(paho.mqtt.golang)和raspberry使用python(paho.mqtt.python)进行服务器端编程和逻辑,并且我将mosquitto.conf上的set_tcp_nodelay设置为true,但没有运气
答案 0 :(得分:0)
捕获的数据包(使用TCPDUMP捕获)在一个MQTT数据包中具有10个以上的MQTT发布消息。这是由nagle的算法引起的吗?以及如何使每个消息在同一时间发送,并且每个发布消息都有单独的数据包
我将mosquitto.conf上的set_tcp_nodelay设置为true,但是没有运气
set_tcp_nodelay应该可以工作,但也许可以同时发送消息,以便将某些消息绑定在一起,然后从应用程序层传递到tcp / ip层。
在(paho.mqtt.golang)中是否有类似flush()的方法?
或最糟糕的主意是,发布一条消息,关闭连接,然后重新启动新的连接以发送下一条消息。疯了...
和@hardillb一样,我很好奇为什么要发送单独的数据包? 根据tcp / ip模型,我们不在乎tcp / ip层中的消息发送方式,我们可以在应用程序层中接收正确的消息,就足够了。
答案 1 :(得分:0)
请在python paho客户端使用下面一行来禁用Nagle算法,它不会在一包/帧中发送多条消息
client.connect("0.0.0.0", 1883, 60)
client.socket().setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)