簡體   English   中英

MQTT PUBACK Web套接字

[英]MQTT PUBACK web sockets

我正在使用HiveMQ Websocket Client並且在message delivery HiveMQ Websocket Client一些問題。 所以,我遇到了PUBACK這個詞

讓我向您解釋一下我的理解,然后我會問我的問題。

每當我們使用QOS1發送消息時,hivemq服務器都會通過PUBACK回調確認發送者。

現在,我打算訂閱我的Web套接字中的onPubackReceived事件,但是該事件在發送消息后不會觸發。

我的代碼:

var clientId = ClientIdentifier;


    mqtt = new Messaging.Client(
                    host,
                    port,
                    clientId);
    var options = {
        timeout: 3,
        keepAliveInterval: 60,
        useSSL: useTLS,
        cleanSession: cleansession,
        onSuccess: onConnect,
        onFailure: function (message) {
            connected = false;            
            setTimeout(MQTTconnect, reconnectTimeout);
        }
    };

    mqtt.onConnectionLost = onConnectionLost;
    mqtt.onMessageArrived = onMessageArrived;
    mqtt.onPubackReceived = OnPubackReceived;

當連接斷開並且消息到達時, onConnectionLostonMessageArrived都將正確觸發,但是onPubackReceived不會觸發。

請讓我知道,如果我對它的理解正確,或者我做錯了什么?

這不是HiveMQ問題。

我的假設是,您使用HiveMQ Websocket客戶端作為實現的起點。

無論如何, Paho MQTT客戶端都沒有onPubackReceived字段。 如果您提供有關您的用例的更多詳細信息,或者您在消息傳遞中遇到什么問題,我也許可以為您指明正確的方向。

編輯:您所描述的在MQTT中稱為Quality of Service 1 可以保證至少收到一次消息。 保持此保證並因此重新發送消息是客戶端實現的工作,如果沒有收到PUBACK 在您的應用程序中手動干預此行為將導致客戶端的持久性不一致。 為了澄清起見:只需將duplicate=true設置將不會導致消息被識別為重復項。 它還必須具有與原始messageID相同的messageID 我實際上找不到關於paho.js任何文檔, paho.js包含Quality of Service =1。但是, MQTT.js可以。

QoS 1:至少接收一次:只要客戶端未從服務器收到確認,就發送和存儲數據包。 MQTT確保將其接收,但是可以重復。

總結一下:

  • 客戶端對象的工作是重新發送消息,而沒有收到PUBACK。 這是MQTT規范的一部分。
  • 使用MQTT.js可在Websocket上使用,並確保保持QoS levels

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM