踩过的坑又踩一遍,留个笔记吧
浏览器原生不支持传统 MQTT 的 TCP 连接(比如 1883 端口),只能用 WebSocket 来通信。
例如 ESP32 使用
PubSubClient
连接mqtt://192.168.1.100:1883
是走 TCP 协议如果让它去连一个
protocol websockets
的端口(9001),就会失败!
所以某个客户端想用浏览器来收发信息需要服务器同时配置两个端口:
以Mosquitto mqtt为例:
# /etc/mosquitto/mosquitto.conf
# 默认 MQTT 端口(TCP)
listener 1883
protocol mqtt
# WebSocket 用于网页访问
listener 9001
protocol websockets
#保存后重启:
#sudo systemctl restart mosquitto
这样就可以各走各的,不冲突。
ESP32 连
1883
HTML 页面连
9001