如何在单独的数据包中制作每个MQTT发布消息?

时间:2018-12-27 12:25:31

标签: tcp mqtt mosquitto paho

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

在这种情况下,我想一次用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,但没有运气

stacked MQTT publish messages on one MQTT Packet list of captured packets on raspberry pi viewed on wireshark

2 个答案:

答案 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)