MQTT订阅比发布慢得多

2024-05-29 01:31:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用MQTT将声纳传感器数据从EV3DEV设备传输到PC。为此,我在ubuntu上设置了MQTT MOSQUITO代理,该代理在Microsoft的Windows Linux子系统(WLS)下运行,如下图所示

Schematic of current arquitecture

在EV3DEV端,我使用umqtt.simple模块,在PC端,我使用Paho MQTT模块

从EV3DEV到代理的消息似乎像我预期的那样快速流动(速度与我在早期版本中使用socks时的实验速度相似)。问题出现在订阅者端,我可以看到消息接收速度慢得多,导致消息在浏览器中排队。当我在几秒钟后停止EV3DEV时,我会在电脑上持续收到信息一段时间

这种性能差异合理吗?与普通sock通信相比,我希望MQTT为数据传输增加一些额外的延迟,但我当然不希望MQTT消息发送和消息订阅之间的直通输出有如此大的差异

附加说明 -我在WLS下安装了蚊子,因为它看起来更容易,而windows版本似乎仅仅通过安装就无法工作。 -我不确定我发送消息的速率。可能与代理获取传感器数据的速度一样快,因为它位于一个专用于获取传感器数据并将其发送给代理的循环中。无论如何,问题在于代理接受来自发布者的消息的速率远远高于它向订阅者发送消息的速率。 -下面是我在on_message回调函数中使用的代码示例:

def ProcessMessage(self, client, userdata, msg):
    logging.info("Message received from broker:" +msg.payload.decode())
    Switch = {'robot/sonar': self.PutInSonarQueue, "robot/odo": 
    self.PutInOdometryQueue}
    payloadasobject = ast.literal_eval(msg.payload.decode())
    Switch[msg.topic](payloadasobject)

switch语句调用只将消息放入队列的函数


Tags: 模块数据self版本消息代理速率msg
1条回答
网友
1楼 · 发布于 2024-05-29 01:31:35

嗯。 似乎我用太高的消息速率压倒了MessageBroker,让它无法处理。 现在,我让它在消息发布之间休眠50毫秒,而不是一个连续循环,现在订阅者似乎以与发送消息相同的速率接收消息

相关问题 更多 >

    热门问题