繁体   English   中英

用于 MQTT 的 JavaScript 客户端不使用 WebSockets

[英]JavaScript client for MQTT not using WebSockets

我正在构建一个 AngularJS 应用程序并使用 Paho JavaScript 客户端通过 Web 套接字连接到 MQTT 代理 (test.mosquitto.org)。 这工作得很好。 我想通过直接 MQTT 连接到 MQTT 代理(为了支持未启用 websocket 的代理的完整性)。

由于Paho客户端不支持直接MQTT,我尝试了mqtt.js的浏览器版本(browserMqtt.js)。

这是我的代码中的主要行:

//var options = { host: "test.mosquitto.org", port: 8080 }; //works!
var options = { host: "test.mosquitto.org", port: 1883 }; //does not work!
var client  = mqtt.connect(options);

同样,这适用于 WebSockets(端口 8080),但是当我尝试通过直接 MQTT(端口 1883)连接时,我在控制台中从 browserMqtt.js 收到错误消息消息,而不是来自我的错误处理程序,因为它没有触发:

WebSocket connection to 'ws://test.mosquitto.org:1883/' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET

我的应用程序在 Chrome 浏览器上运行。

我想知道这是代码问题还是设计问题? 是否出于某种原因无法使用 MQTT 从浏览器连接到代理,并且库正在强制调用 WebSocket?

感谢您提供任何见解,因为我从几天来阅读的所有内容中收到了混合信息,但没有明确的示例可以用作解决方案。

WebSocket 是一种浏览器支持的协议,而不是普通的 TCP 套接字(如果您想直接运行 MQTT,您最终需要它)。

对于MQTT.js文档指出浏览器部分:

你的经纪人应该接受 websocket 连接

因此,没有办法解决必须从浏览器通过 WebSocket 使用 MQTT 的问题。 您可以创建一个(服务器端)代理,该代理将接受 WebSocket 连接以使用普通 MQTT 协议将它们传递给目标代理。

将连接地址从ws://test.mosquitto.org:1883改为mqtt://test.mosquitto.org:1883

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM