--
前言
之前一直使用 MQTT.js,後來出現了「WebSocket connection to 'ws://xxx/mqtt' failed: Close received after close」錯誤,雖然會自動重連,不過就要處理重連初始化的訊息。可以處理不過在 google 追究之後,就決定改用 Paho MQTT 試試看,畢竟在 Python 也是使用 Paho MQTT 的版本,說不定可以解決問題
--
參考資源
- Paho JavaScript - MQTT Client Library Encyclopedia (hivemq.com)
- Eclipse Paho | The Eclipse Foundation
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
--
1,617 total views, 3 views today