MQTT - 使用 Paho MQTT JavaScript

7 月 9, 2024

--

前言

之前一直使用 MQTT.js,後來出現了「WebSocket connection to 'ws://xxx/mqtt' failed: Close received after close」錯誤,雖然會自動重連,不過就要處理重連初始化的訊息。可以處理不過在 google 追究之後,就決定改用 Paho MQTT 試試看,畢竟在 Python 也是使用 Paho MQTT 的版本,說不定可以解決問題

--

參考資源

Paho MQTT JavaScript 1.0.3 版本截至 2024/07 只支援 3.1.1,對於網頁 WebSocket 而言並不影響

--

程式碼

--

安裝、連接

安裝使用 CDN,MQTT Broker 使用了 HiveMQ 的

.connect() 選項

  • timeout:"number"
  • userName:"string"
  • password:"string"
  • willMessage:"object"
  • keepAliveInterval:"number"
  • cleanSession:"boolean"
  • useSSL:"boolean"
  • invocationContext:"object"
  • onSuccess:"function"
  • onFailure:"function"
  • hosts:"object"
  • ports:"object"
  • mqttVersion:"number"
  • mqttVersionExplicit:"boolean"
  • uris: "object"

如果 Broker 需要帳號、密碼,就需要增加 userName password 選項

--

訂閱、取消訂閱主題

訂閱主題

取消訂閱主題

--

傳送訊息

使用 JSON 格式

--

接收訊息

接收的訊息經過處理轉換成 JSON 格式

messge 可接收到

  • destinationName 主題
  • duplicate 是否為重複發送
  • payloadBytes 字數
  • payloadString 內容
  • qos
  • retained

--

AMQJS0005E Internal error.

Paho MQTT 出現這個錯誤的話是 onMessageArrived 接收訊息處理時程式有錯誤,導致 WebSocket 斷線,這時 Paho 會攔截錯誤加上自己的資訊。所以會讓人誤會是 MQTT 連接問題,其實只是接受訊息內的程式出錯。

--

結論

Paho MQTT 確實解決了 MQTT.js 的問題,Paho MQTT 的心跳保持功能比較正常,一天的測試之下都是維持同一個連接,並不會重新連接。反之 MQTT.js 則是多次重新連接,不知道原因為何。

最後 (2024/07) Hoyo 推薦 JavaScript 使用 Paho MQTT

--

 941 total views,  1 views today

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。