WebSocket 插件
This content is not available in your language yet.
本插件为MQTT Broker提供WebSocket协议支持,允许客户端通过WebSocket连接进行MQTT通信。
- 基于Feat框架的HTTP服务器实现WebSocket升级
- 支持MQTT over WebSocket协议(Sec-WebSocket-Protocol: mqtt)
- 使用ByteBuffer处理二进制消息流
- 与核心Broker共享相同的消息处理器和会话管理
port: 8084 # WebSocket监听端口// 使用MQTT.js客户端连接示例const client = mqtt.connect('ws://localhost:8080/mqtt', { protocol: 'ws', path: '/mqtt'})WebSocket 协议升级泳道图
Section titled “WebSocket 协议升级泳道图”sequenceDiagram
autonumber
participant Browser as 浏览器/客户端
participant WsPlugin as WebSocket插件<br/>(Feat HTTP服务器)
participant Broker as MQTT Broker
participant Subscribers as 订阅者
%% WebSocket握手阶段
rect rgb(230, 245, 255)
Note over Browser,Broker: WebSocket 握手阶段
Browser->>WsPlugin: 1. HTTP GET /mqtt<br/>Upgrade: websocket<br/>Sec-WebSocket-Protocol: mqtt
alt 协议验证通过
WsPlugin->>WsPlugin: 2a. 验证 Sec-WebSocket-Protocol<br/>确认支持 mqtt 子协议
WsPlugin-->>Browser: 3a. 101 Switching Protocols<br/>Sec-WebSocket-Accept: xxx
Note over Browser,WsPlugin: WebSocket 隧道建立
else 协议验证失败
WsPlugin-->>Browser: 3b. 400 Bad Request<br/>(缺少mqtt子协议)
end
end
%% MQTT通信阶段
rect rgb(255, 245, 230)
Note over Browser,Subscribers: MQTT over WebSocket 通信阶段
Browser->>WsPlugin: 4. WebSocket Frame<br/>二进制 MQTT CONNECT
WsPlugin->>Broker: 5. 解码 MQTT CONNECT<br/>转发给Broker
Broker->>Broker: 6. 处理认证
Broker-->>WsPlugin: 7. MQTT CONNACK
WsPlugin-->>Browser: 8. WebSocket Frame<br/>二进制 CONNACK
Note over Browser,Subscribers: 正常MQTT消息收发
Browser->>WsPlugin: 9. PUBLISH 消息
WsPlugin->>Broker: 10. 解码并转发
Broker->>Subscribers: 11. 查找并转发<br/>给所有订阅者
Subscribers->>Broker: 12. 其他客户端PUBLISH
Broker->>WsPlugin: 13. 转发给WebSocket客户端
WsPlugin-->>Browser: 14. WebSocket Frame<br/>推送消息
end
%% 连接关闭阶段
rect rgb(255, 230, 230)
Note over Browser,Broker: 连接关闭阶段
Browser->>WsPlugin: 15. WebSocket Close Frame<br/>或连接断开
WsPlugin->>Broker: 16. 通知客户端断开
WsPlugin->>WsPlugin: 17. 清理WebSocket资源
end
- 协议升级: 客户端发送HTTP升级请求,需包含
Sec-WebSocket-Protocol: mqtt头部 - 握手验证: 服务器验证WebSocket协议头,确认支持MQTT子协议
- 隧道建立: 握手成功后建立WebSocket双向通信隧道
- MQTT封装: MQTT二进制报文通过WebSocket帧传输
- 数据流转: 浏览器/客户端通过WebSocket收发MQTT消息,Broker处理逻辑与普通MQTT一致