简体   繁体   中英

MQTT PUBACK web sockets

I'm working on HiveMQ Websocket Client and I'm facing some issues with the message delivery . so, I've come across the word PUBACK

let me explain you about my understanding and then I will ask my question.

whenever we send a message with QOS1 , the hivemq server will acknowledge the sender with a PUBACK callback.

Now, I'm planning to subscibe to onPubackReceived event in my websockets, but the event is not firing after sending the message.

My Code:

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;

Both the onConnectionLost and onMessageArrived are firing properly when a connection lost and message arrived, but the onPubackReceived is not firing.

please let me know, if I have understood it correctly or if I'm doing some mistake?

This not a HiveMQ issue.

My assumption is, that you used the HiveMQ Websocket Client as a starting point for your implementation.

In any case a Paho MQTT Client does not have a onPubackReceived field. If you provide more details about your use case or what's your issue with message delivery, I might be able to point you into the right direction.

EDIT: What you are describing is called Quality of Service 1 in MQTT. It is a guarantee, that a message is received at least once . It is the client implementation's job to keep this guarantees and therefor resend a message, should a PUBACK not be received. Manually interfering with this behaviour in your application would result in inconsistency regarding the client's persistence. For clarification: Simply setting duplicate=true will not result in a message being recognised as a duplicate. It will also have to have the the same messageID as the original. I was not able to actually find any documentation about paho.js keeping the Quality of Service = 1. However, MQTT.js does.

QoS 1 : received at least once : The packet is sent and stored as long as the client has not received a confirmation from the server. MQTT ensures that it will be received, but there can be duplicates.

To sum things up:

  • Resending of messages, no PUBACK was received on, is the client Object's job. This is part of the MQTT specification .
  • Using the MQTT.js works over Websockets and ensures to keep QoS levels

Hope this helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM