【发布时间】:2015-12-30 02:22:18
【问题描述】:
我正在将 node.js mosca MQTT 代理用于一些物联网 (iot) 应用程序。
https://github.com/mcollina/mosca
MQTT 代理(特别是 mosca)可以处理的最大主题数是多少?
如果我想增加允许的主题数量,有没有可以修改的配置参数或者代码的哪一部分可以修改?
【问题讨论】:
我正在将 node.js mosca MQTT 代理用于一些物联网 (iot) 应用程序。
https://github.com/mcollina/mosca
MQTT 代理(特别是 mosca)可以处理的最大主题数是多少?
如果我想增加允许的主题数量,有没有可以修改的配置参数或者代码的哪一部分可以修改?
【问题讨论】:
在不查看 mosca 的来源的情况下,我将就通用代理做一个一般性声明。
主题的数量将由客户端订阅的主题数量设置,因为此列表是发布新消息时搜索的内容,因此假设保留此列表,我将采用某种树结构(即很可能是由于主题的分层性质),那么限制可能是服务器上的内存量(假设是 64 位主机)。
此外,由于 mosca 在 nodejs 上运行,因此是单线程的,拥有大量主题可能会在内存不足之前影响性能。
【讨论】:
虽然 hardlib 的回答是正确的,但我想补充一点,可能的主题数量当然受到经纪人/客户最大主题长度的限制。
如果严格遵循 MQTT 规范,我们正在谈论 7^65536 个可能的主题(如 here 解释的那样),但对于较小的代理/客户端(例如嵌入式内容),最大主题长度可能比 65536 小很多字节。例如,PubSubClient 的默认最大长度为 128 字节整个数据包。
【讨论】:
如果您将 MQTT 代理视为第 4 层交换机(在客户端之间切换消息),并且主题是它打开的地址(键),那么如果您必须做任何事情来启用大量的主题。
我们运行的常见应用程序是每个单独的发布者至少有 1 个主题,有数千个甚至数十万个发布者。
【讨论】: