MQTT 代理可以处理的最大主题数是多少?

What is the maximum number of topics that a MQTT broker can handle?

我正在为某些物联网 (iot) 应用程序使用 node.js mosca MQTT 代理。

https://github.com/mcollina/mosca

MQTT 代理(特别是 mosca)可以处理的最大主题数是多少?

如果我想增加允许的主题数量,是否有我可以修改的配置参数或我可以更改代码的哪一部分?

在不查看 mosca 的源代码的情况下,我将对通用代理进行一般性说明。

主题的数量将由客户端订阅的主题的数量来设置,因为这个列表是在发布新消息时搜索的内容,所以假设这个列表保持某种树结构(这很可能是由于主题的分层性质)那么限制可能是服务器上的内存量(假设 64 位主机)。

此外,由于 mosca 运行s 在 nodejs 上,因此是单线程的,拥有大量主题可能会在 运行 内存不足之前影响性能。

虽然 hardlib 的回答是正确的,但我想补充一点,可能的主题数量当然受经纪人/客户的最大主题长度限制。

如果严格遵循 MQTT 规范,我们将讨论 7^65536 个可能的主题(如所解释的 ), but for smaller brokers / clients (for example embedded stuff) the maximum topic length can be a lot smaller than 65536 bytes. PubSubClient 例如,整个数据包的默认最大长度为 128 字节 .

如果您将 MQTT 代理视为第 4 层交换机(在客户端之间切换消息)并且主题是它打开的地址(密钥),那么如果您必须做任何事情,那么它将是一个设计糟糕的代理启用大量主题。

我们 运行 遇到的常见应用程序是每个单独的发布者至少有 1 个主题,有数千甚至数十万个发布者。