每当我们使用#(通配符)订阅许多主题时,会使用多少内存?例如,如果我们有 10M主题,可以使用#订阅所有这些主题,或者是否导致内存泄漏?
答案 0 :(得分:2)
此问题与MQTT代理和客户端实现严格相关。 当然,MQTT标准规范并未提供与此类实现相关的功能的任何信息。
保罗。
答案 1 :(得分:1)
延伸ppatierno的答案。
对于大多数设计良好的代理,数量或范围(对于外卡)订阅不应该真正改变正常情况下使用的内存量。最多存储应该等同于客户端订阅的主题字符串,这将与传入的消息进行匹配,以查看是否应该传递它。
这可能不适用于持久订阅(其中clean会话值未设置为true)。在这种情况下,如果客户端断开连接,则消息可以排队,直到它重新连接。这里消耗的内存量将是消息数量及其大小(加上代理可能具有的丢弃策略)的函数,而不是订阅主题数量的函数。
要回答问题的第二部分,使用通配符订阅10,000,000个主题不太可能导致内存泄漏,但根据在这些主题上发布消息的频率,它可能会充斥客户端。