如何防止入站数据包泛滥?
How to prevent inbound packet flood?
这个问题是关于如何处理应用程序中的入站消息。
例如,应用程序一次只能处理一条消息,直到某个特定时间才准备好接受更多消息(通过回调)。或者更具体的情况——如果代理将尝试向客户端传递更多客户端可以物理持有的消息(例如,免费可分配 RAM 限制),将会发生什么?
在这种情况下,最好的实施方式是什么?
现在我正在手动执行 mosquitto_loop()
。我看到我可以在准备接收消息时执行 mosquitto_loop_read()
,在准备发送消息时执行 mosquitto_loop_write()
(例如发布后)。但我不确定,因为接收消息和发布消息一样,涉及“读操作”和“写操作”(例如发布发送数据然后接收PUBACK)。 mosquitto_loop_read()
中的“读取操作”是什么意思 - 从主题执行逻辑读取(涉及发送和接收数据包),还是仅执行物理接收?
接下来,我如何控制使用 mosquitto_loop_read()
或 mosquitto_loop()
接收的消息数量?是关于 max_packets 论点的吗?为什么它是“当前未使用的”,因为它有明确的用例?
您不需要做任何特别的事情。
如果您 运行 正常循环,只要您不在消息回调中切换到单独的线程,它一次只会处理一条消息。
mosquitto_loop()
将为每个传入消息调用消息回调并阻塞,直到 returns.
现在,如果您不能平均在消息到达时尽快处理消息,那您就有问题了,但如果消息只是短暂的突发,则消息应该在代理中备份(您需要查看最大飞行消息设置并且可能使用比 QOS 0)
这个问题是关于如何处理应用程序中的入站消息。
例如,应用程序一次只能处理一条消息,直到某个特定时间才准备好接受更多消息(通过回调)。或者更具体的情况——如果代理将尝试向客户端传递更多客户端可以物理持有的消息(例如,免费可分配 RAM 限制),将会发生什么?
在这种情况下,最好的实施方式是什么?
现在我正在手动执行 mosquitto_loop()
。我看到我可以在准备接收消息时执行 mosquitto_loop_read()
,在准备发送消息时执行 mosquitto_loop_write()
(例如发布后)。但我不确定,因为接收消息和发布消息一样,涉及“读操作”和“写操作”(例如发布发送数据然后接收PUBACK)。 mosquitto_loop_read()
中的“读取操作”是什么意思 - 从主题执行逻辑读取(涉及发送和接收数据包),还是仅执行物理接收?
接下来,我如何控制使用 mosquitto_loop_read()
或 mosquitto_loop()
接收的消息数量?是关于 max_packets 论点的吗?为什么它是“当前未使用的”,因为它有明确的用例?
您不需要做任何特别的事情。
如果您 运行 正常循环,只要您不在消息回调中切换到单独的线程,它一次只会处理一条消息。
mosquitto_loop()
将为每个传入消息调用消息回调并阻塞,直到 returns.
现在,如果您不能平均在消息到达时尽快处理消息,那您就有问题了,但如果消息只是短暂的突发,则消息应该在代理中备份(您需要查看最大飞行消息设置并且可能使用比 QOS 0)