我正在构建一个AngularJS应用程序,并使用Paho JavaScript客户端通过Web套接字连接到MQTT代理(test.mosquitto.org)。这很好用。我想通过直接MQTT连接到MQTT代理(为了完整性,支持没有启用websockets的代理)。
由于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调用?
感谢任何见解,因为我在几天内阅读了所有我读过的信息,但没有明确的例子可以作为解决方案。
答案 0 :(得分:4)
WebSocket是一种浏览器支持的协议,而不是普通的TCP套接字(如果你想直接运行MQTT,最终需要它)。
Browser 部分中MQTT.js states的文档:
您的经纪人应该接受websocket连接
所以没有必要通过浏览器在WebSocket上使用MQTT。您可以创建一个(服务器端)代理,该代理可以接受WebSocket连接,使用普通的MQTT协议将它们传递给目标代理。
答案 1 :(得分:-1)
将连接地址从ws://test.mosquitto.org:1883
更改为mqtt://test.mosquitto.org:1883