繁体   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