EMQX 作为 MQTT Broker,支持 MQTT over TCP 和 MQTT over WebSocket 两种协议
1. EMQX 支持的协议与端口
协议类型 | 默认端口 | 用途说明 |
---|---|---|
MQTT over TCP | 1883 | 标准的 MQTT 协议,基于 TCP 传输(用于后端服务、物联网设备等)。 |
MQTT over TLS | 8883 | 加密的 MQTT over TCP(TLS/SSL 加密,安全性更高)。 |
MQTT over WS | 8083 | 基于 WebSocket 的 MQTT(用于浏览器、Web 前端等需要跨域的场景)。 |
MQTT over WSS | 8084 | 加密的 MQTT over WebSocket(TLS/SSL 加密)。 |
关键点
- MQTT over TCP:直接通过 TCP 传输 MQTT 数据包(高性能,适合后端服务)。
- MQTT over WebSocket:将 MQTT 数据包封装在 WebSocket 帧中传输(兼容浏览器,适合 Web 应用)。
- 交互本质:无论使用哪种协议,EMQX 都会将消息统一处理。例如:
- 一个 TCP 客户端发布消息到主题
sensor/data
,WebSocket 客户端订阅同一主题时也能收到消息。 - 协议对客户端透明,仅影响连接方式,不影响消息路由逻辑。
- 一个 TCP 客户端发布消息到主题
2. 在 EMQX 管理后台区分不同协议
在 EMQX Dashboard 中,可以通过以下方式区分不同协议的客户端:
(1) 查看监听器(Listeners)
-
进入 EMQX Dashboard(默认地址
http://<EMQX-IP>:18083
)。 -
导航到 Management → Listeners。
https://static.emqx.net/images/emqx-listener-config.png -
查看已启用的监听器:
- TCP 监听器:端口
1883
(默认名称mqtt:tcp:internal
)。 - WebSocket 监听器:端口
8083
(默认名称mqtt:ws:internal
)。 - 如果启用了 TLS,会显示
8883
(TCP TLS)和8084
(WebSocket TLS)。
- TCP 监听器:端口
(2) 客户端连接信息
- 进入 Clients 页面,查看已连接的客户端。
- 在客户端详情中,Transport 字段会显示协议类型:
TCP
:表示通过 TCP 连接。WS
:表示通过 WebSocket 连接。WSS
:表示通过加密的 WebSocket 连接。
3. 你的配置与 EMQX 的对应关系
根据你的配置文件:
yaml
mqtt:BASIC: # MQTT over TCPprotocol: MQTThost: 10.10.206.48port: 1883 # EMQX 的 TCP 监听端口DRC: # MQTT over WebSocketprotocol: WShost: 10.10.206.48port: 8083 # EMQX 的 WebSocket 监听端口path: /mqtt # WebSocket 路径
验证配置是否生效
-
检查 EMQX 监听器:
- 确认
1883
和8083
端口的监听器已启用(通过 Dashboard 的 Listeners 页面)。 - 如果未启用,需在 EMQX 配置文件
emqx.conf
中添加:listeners.tcp.default.bind = 1883 listeners.ws.default.bind = 8083 listeners.ws.default.path = /mqtt
- 确认
-
测试客户端连接:
- 使用
BASIC
配置的客户端(TCP)连接到1883
端口。 - 使用
DRC
配置的客户端(WebSocket)连接到8083
端口,路径为/mqtt
。
- 使用
4. 注意事项
-
端口冲突:
- 确保 EMQX 的 TCP 和 WebSocket 端口未被防火墙拦截。
- 如果端口未开放,客户端会连接失败。
-
路径(Path):
- WebSocket 连接的
path
必须与 EMQX 监听器的配置一致(例如/mqtt
)。 - 如果路径不匹配,WebSocket 握手会失败。
- WebSocket 连接的
-
安全性:
- 生产环境建议使用 TLS 加密(端口
8883
或8084
)。 - 在 Dashboard 的 Listeners 页面可配置 TLS 证书。
- 生产环境建议使用 TLS 加密(端口
总结
- EMQX 同时支持 MQTT over TCP 和 WebSocket,通过不同端口和协议类型区分。
- 交互逻辑统一:无论客户端使用哪种协议,消息路由和主题订阅/发布的行为一致。
- 在 Dashboard 中:通过监听器状态和客户端详情即可区分协议类型。