簡體   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