如何防止入站数据包泛滥?

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)