![](/img/trans.png)
[英]Error While connecting to MQTT Broker using JavaScript MQTT Client With 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.