服务端2月19日 15:04
MQTT Broker 负责什么?Mosquitto、EMQX 和 HiveMQ 怎么选?MQTT Broker 是 MQTT 系统里的中枢,不只是“转发消息”的服务器。它要维护客户端连接、处理认证授权、保存订阅关系、按主题路由消息,还要根据 QoS 管理确认、重传和离线消息。选 Broker 时不能只看宣传里的百万连接,更要看你的消息量、持久化要求、集群能力、运维团队是否能长期维护。
## Broker 到底做哪些事?
第一件事是连接管理。客户端通过 CONNECT 建立长连接,Broker 要校验 Client ID、账号、证书和 Keep Alive。连接建立后,它还要发现客户端是否掉线,并在异常断开时发布遗嘱消息。连接数一多,文件句柄、内存、心跳间隔都会变成真实的...服务端2月19日 15:04
MQTT 通信如何保证安全?TLS、认证和 ACL 怎么搭配?MQTT 安全不能只靠一个用户名密码。比较稳的做法是分三层:先用 TLS 保护链路,再用认证确认“谁连上来”,最后用 ACL 限制“它能发布和订阅什么主题”。如果消息本身很敏感,还要在应用层做加密或签名,因为 TLS 只保护传输过程,Broker 收到消息后仍然能看到明文。
## MQTT 安全主要防什么?
MQTT 常见风险有四类:明文传输被抓包、弱口令被撞库、客户端越权订阅主题、伪造设备发送控制指令。1883 端口默认不加密,在测试环境很方便,但放到公网基本等于把账号和消息内容暴露出去。生产环境通常使用 8883 端口跑 MQTT over TLS,客户端校验 Broker 证书...服务端2月19日 15:05
MQTT 5.0 比 3.1.1 多了什么?哪些特性值得升级?MQTT 5.0 不是把 3.1.1 推倒重来,而是在原有发布/订阅模型上补齐了工程化能力。它解决的重点不是“能不能发消息”,而是消息过期怎么表达、错误原因怎么定位、请求响应怎么关联、客户端能力怎么协商,以及高并发系统里如何做流量控制。
## 最值得关注的新特性
第一类是属性 Properties。MQTT 5.0 给很多控制报文增加了属性字段,可以携带内容类型、响应主题、关联数据、消息过期时间、用户属性等元信息。以前这些信息通常要塞进 payload,客户端和服务端各自约定格式;现在协议层有标准位置,跨团队和跨语言接入会少很多口头约定。
第二类是会话和消息过期。MQTT 3.1....服务端2月19日 15:06
MQTT 有哪些控制报文?连接、发布和订阅流程怎么串起来?MQTT 控制报文不是一张要死背的清单,而是一套围绕连接、发布、订阅、心跳和断开的状态机。理解它们的最好方式,是先把流程跑通:客户端用 CONNECT 建立连接,Broker 用 CONNACK 回应;发布消息用 PUBLISH,不同 QoS 会带出 PUBACK、PUBREC、PUBREL、PUBCOMP;订阅主题用 SUBSCRIBE/SUBACK,取消订阅用 UNSUBSCRIBE/UNSUBACK;空闲时靠 PINGREQ/PINGRESP 保活,正常退出用 DISCONNECT。
## 报文类型怎么分组?
连接类只有 CONNECT 和 CONNACK。CONNECT 里会...服务端2月19日 15:06
MQTT 和 HTTP 有什么区别?物联网场景该怎么选?MQTT 和 HTTP 都跑在应用层,很多时候也都基于 TCP,但它们解决的问题不一样。HTTP 更像一次明确的业务请求:客户端问,服务端答,适合查数据、提交表单、上传文件和调用 REST API。MQTT 更像一个消息中转站:设备把消息发到主题,订阅者按主题接收,发布者不需要知道谁在听。
## 核心区别是什么?
最明显的区别是通信模型。HTTP 是请求/响应,天然以客户端发起为中心;MQTT 是发布/订阅,Broker 负责路由消息,可以把一条温度数据同时分发给监控面板、告警服务和数据入库服务。
第二个区别是连接方式。HTTP/1.1 可以 Keep-Alive,HTTP/2 也...服务端2月19日 15:07
MQTT Last Will 为什么能发现设备异常离线?MQTT Last Will(遗嘱消息,LWT)是在客户端连接 Broker 时预先登记的一条消息。当客户端异常断开,比如断电、进程崩溃、网络中断或 Keep Alive 超时,Broker 会把这条消息发布到指定 Topic。它最常见的用途是设备在线状态:设备正常工作时发布 `online`,异常离线时由 Broker 代发 `offline`。它解决的是“设备突然没了,其他系统怎么知道”的问题,但不能告诉你离线原因,也不能替代完整的监控系统。在物联网项目里,LWT 更像一个兜底信号:它能尽快告诉你连接不可靠了,但后续仍要靠日志、最后上报时间和设备自检来定位原因。
## 它什么时候会...服务端2月19日 15:08
MQTT Retained Message 为什么新订阅者会收到旧消息?MQTT retained message 是 Broker 为某个 Topic 保存的“最后一条状态消息”。发布端设置 `retain=true` 后,Broker 会把这条消息存下来;后来才订阅该 Topic 的客户端,不用等设备再次上报,也会立刻收到这条保留消息。它适合表达“当前状态”,不适合表达“历史事件”。温度、开关状态、设备配置、系统版本这类值很适合;告警流水、订单事件、聊天消息就不适合,否则新订阅者会误以为旧事件刚刚发生。
## 它到底解决什么问题?
没有 retained message 时,新客户端订阅 `sensor/123/temperature` 后只能等待下...前端2月19日 15:10
Module Federation 是什么?它为什么能运行时加载模块?Module Federation 是 Webpack 5 提供的运行时模块联邦能力,它允许一个应用在运行时加载另一个应用暴露出来的模块。简单说,remote 负责把组件、页面或工具函数暴露成可被消费的模块,host 负责在需要时加载 remoteEntry.js,再从远程容器里取模块执行。它和传统 npm 包最大的区别是:npm 包在构建前就固定进产物,Module Federation 可以在运行时拿到远程应用刚发布的代码。
## 追问
### remoteEntry.js 在里面扮演什么角色?
remoteEntry.js 可以理解为远程应用的模块目录和运行时入口,它记录了 e...前端2月19日 15:10
Module Federation、qiankun 和 single-spa 应该怎么选?Module Federation、qiankun 和 single-spa 都能做微前端,但它们解决的问题层级不一样。Module Federation 更像“模块级运行时共享和发布机制”,擅长跨应用复用组件、页面和依赖;qiankun 更像“应用级接入框架”,帮你加载、隔离和管理子应用;single-spa 更偏底层编排,负责不同应用的生命周期注册和路由调度。选型时不要先问谁更先进,而要先问团队需要共享模块,还是需要托管一堆完整子应用。
## 追问
### 三者最大的差异是什么?
Module Federation 的边界在构建系统和模块加载,它依赖 Webpack 5 或兼容实...前端2月19日 15:10
Module Federation shared 配置如何处理依赖版本冲突?shared 配置的作用,是让多个独立构建的应用在运行时协商依赖,尽量复用同一个包,而不是每个 remote 都带一份 React、Vue 或 UI 组件库。它不是简单的“去重开关”,而是一套运行时共享作用域机制:应用启动时初始化 shareScope,容器把自己可提供的依赖和版本注册进去,消费方再按 requiredVersion、singleton、strictVersion 等规则选择。理解这点,才能知道版本冲突为什么有时只是 warning,有时会直接炸。
## 追问
### singleton 到底什么时候必须开?
singleton 适合那些进程里只能有一个实例的库,比如...