ITPub博客

首页 > 应用开发 > Python > 大规模设备接入,Netty还是MQTT?我把真实数据摆出来

大规模设备接入,Netty还是MQTT?我把真实数据摆出来

原创 Python 作者:suoten 时间:2026-10-10 20:04:53 0 删除 编辑

上篇文章《用Netty还是MQTT》发出去之后,评论区吵起来了。

有个兄弟说“瞎扯淡”。然后“林间隐居宁静致远”本人来了,说那段评论确实是他写的——他用Netty做了7年校园洗衣机项目,几十万台设备,稳定运行;后来做工业园区用MQTT,每个网关连100个设备,也跑了一年半。

两段真实的项目经历,两种完全不同的技术选型。到底谁对?

我说点更具体的。

先还原一下两个项目的真实场景。

项目A:校园智慧洗衣机(Netty方案)

设备数量:一个学校3000到10000台,200个学校,总共几十万台

通讯方式:设备通过4G/WiFi连到服务器,走自定义TCP协议

核心需求:实时控制(用户扫码支付后要立刻启动洗衣机)

技术选型:Netty + 自定义协议

运行时间:7年

运行状态:稳定

项目B:工业园区智慧管理(MQTT方案)

设备数量:每个网关连接100个设备左右

通讯方式:网关通过MQTT连接到平台

核心需求:数据采集、状态监控、远程管理

技术选型:MQTT(标准协议)

运行时间:1.5年

运行状态:稳定

两个项目都跑通了。但为什么选型完全不同?

第一个关键差异:设备端固件是否可控。

项目A的洗衣机,是这位兄弟自己公司做的——固件程序是自己写的。这意味着他可以自己定义通讯协议、自己控制设备端的行为。设备什么时候发数据、发什么数据、怎么保持连接,全部可以按自己的设计来。

这种情况下,Netty的自定义TCP协议是最优解。没有协议开销、没有标准化约束,通讯效率可以做到最高。

项目B的工业园区,设备来自不同厂家——温控设备、PLC、照明控制器、边缘网关。你不可能让每个厂家都按照你的自定义协议来改固件。这时候只能用标准协议——MQTT是设备端最容易支持的。

第二个关键差异:实时性的要求等级。

项目A要求“用户扫码支付后立即启动”。这个“立即”是多少毫秒?虽然没有明确数字,但用户体验的要求是——扫码之后不能等。

自定义TCP协议走的是直连,客户端和服务器之间没有中间节点。延迟取决于网络质量,局域网内可以做到几毫秒,4G网络下几十毫秒。

项目B的要求是“数据采集、状态监控、远程管理”——这些都是非实时性的。温度数据晚几秒上传没关系,设备状态晚几秒刷新也没关系。

MQTT的延迟是多少?前面提到的论文数据是133ms(云部署场景)。133ms对数据采集完全够用,但如果是“扫码后立即启动洗衣机”,133ms用户能感觉到卡顿吗?可能感觉不到,但如果是“按下急停按钮后立即停机”,133ms就是致命的。

第三个关键差异:连接数量的量级。

项目A是几十万台设备同时在线。如果用MQTT,需要部署一个能承载几十万连接的MQTT Broker。市面上能承载这个量级的Broker不多,而且成本不低。

如果用Netty,一台配置好一点的服务器,用NIO多路复用模型,管理几十万TCP连接是完全可行的。

项目B是每个网关连100个设备。MQTT Broker需要承载的是网关数量,不是设备数量。假设有100个网关,每个网关连100个设备,MQTT Broker只需要承载100个网关连接。这个量级对任何MQTT Broker来说都是小菜一碟。

连接数量级差了一万倍,选型自然不同。

第四个关键差异:协议标准化的价值。

项目B的工业园区,设备来自多个厂家。用MQTT的好处是——任何支持MQTT的设备都能接入,不需要为每个厂家单独开发驱动。

项目A的洗衣机,设备是自己公司做的,固件是自己写的。标准化没有价值,自定义协议反而更高效。

那到底该怎么选?我把决策逻辑画成一张表。

判断维度 选Netty(自定义TCP) 选MQTT 设备固件是否可控 可控(自己开发/可定制) 不可控(多品牌/第三方) 实时性要求 高(毫秒级控制) 低(秒级监控) 连接数量级 十万级以上 万级以下 是否需要标准化接入 不需要 需要 开发资源 有较强的网络编程能力 愿意用现成的Broker和客户端 “瞎扯淡”这条评论,我正面回应一下。

那位兄弟说“瞎扯淡”。我不知道他具体指的是哪部分。但如果他指的是“Netty不适合MQTT的场景”或者“MQTT不适合Netty的场景”——那我同意。没有哪个协议是万  能的。

我的核心观点是:技术选型要看场景,不是看哪个更“先进”。

用Netty做几十万台洗衣机的实时控制,正确。用MQTT做工业园区的数据采集,正确。用Netty做工业园区的多品牌设备接入,也能做,但开发成本高得多。用MQTT做洗衣机的实时控制,也能做,但延迟和确定性要打折扣。

两个项目都跑了几年没出问题,说明选型都是对的。不是“谁对谁错”,是“场景不同”。

最后说一个我从这两个项目里学到的道理。

做技术选型的时候,最容易犯的错误是“用一个项目的经验去套另一个项目”。

“我用Netty做过几十万台设备,所以所有项目都该用Netty。” “我用MQTT做过工业园区,所以所有项目都该用MQTT。”

每个项目都有它的特殊性——设备固件能不能控、实时性要求多少、设备数量多少、团队技术栈是什么。把这些搞清楚,选型自然就清楚了。

不要迷信任何一种技术,也不要贬低任何一种技术。

平时我也写写代码,维护两个开源项目:

ProtoForge(工业协议仿真平台,17种协议,90+设备模板): GitHub:suoten/ProtoForge Gitee:suoten/ProtoForge

EdgeLiteGateway(AI物联网关,13种协议采集,边缘AI推理): GitHub:suoten/EdgeLiteGateway Gitee:suoten/EdgeLiteGateway

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70050062/viewspace-3185162/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-05-07

  • 博文量
    69
  • 访问量
    54885