我正在使用Eclipse Paho MQTT C客户端库在同一台机器上发布和订阅消息。这些消息是从AIMSUN交通模拟器程序在每个模拟步骤(从0.1秒模拟时间到1秒模拟时间)内发送的。
外部应用程序已订阅这些消息,并且始终在侦听新消息。启用了显示汽车的GUI后,模拟运行预计会变慢,并且从交通模拟器程序接收消息之间的间隔与模拟步骤的持续时间匹配。但是,通过命令行运行没有GUI的模拟会导致许多消息丢失,尽管模拟会更快地完成。
从流量模拟器程序接收消息的时间间隔大约是打开GUI时的13倍。例如,如果模拟步骤为1秒,则外部应用程序应该每秒接收一次该消息,但每13秒接收一次。我尝试进行故障排除,发现将消息大小减小为零会导致接收到的消息频率上升并与模拟持续时间匹配。我尝试了不同的QOS级别,结果大致相同。我现在最好的猜测是,MQTT发布者必须等到上一条消息发送后才能再次发送。但是我尝试将发布者和订阅者的QOS设置为0,其“即发即弃”模式应该可以避免此问题。我是MQTT的新手,非常感谢任何有关幕后情况的想法。