浏览器无法运行纯MQTT,但我们可以使用Websocket来传输MQTT消息。我的问题很简单。既然 MQTT、Http 和 websockets 都依赖于 TCP,为什么浏览器可以对话 Http 和 websockets,但不能对话 MQTT。浏览器无法打开原始 TCP 连接,但到底是什么让 MQTT 打开原始 TCP 连接?
所有 HTTP、MQTT、Websockets 都直接使用 TCP(HTTP/3 使用 UDP),您将其描述为“原始”连接。但这些是 TCP 之上的不同应用层协议。出于安全原因,浏览器不允许来自 Web 应用程序内的“原始”TCP 连接。相反,它限制了可以使用的应用程序协议。其他任何内容都必须以某种方式转换为允许的应用程序协议,例如通过 WebSocket 进行隧道传输,而不是直接使用“原始”TCP。
...但是我们可以使用websockets来传输MQTT消息
仅当有一个后端可以将封装在 WebSockets 中的 MQTT 转换为普通 MQTT,即删除外部 WebSockets 隧道。