MQTT PUBACK 网络套接字

MQTT PUBACK web sockets

我正在 HiveMQ Websocket Client 上工作,我在 message delivery 上遇到了一些问题。 所以,我遇到了 PUBACK

这个词

让我解释一下我的理解,然后我会问我的问题。

每当我们使用 QOS1 发送消息时,hivemq 服务器将通过 PUBACK 回调确认发件人。

现在,我打算在我的 websockets 中订阅 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 Client 作为实施的起点。

在任何情况下,Paho MQTT Client 都没有 onPubackReceived 字段。 如果您提供有关您的用例的更多详细信息或消息传递的问题是什么,我也许可以为您指明正确的方向。

编辑: 您所描述的在 MQTT 中称为 Quality of Service 1。这是一个保证,消息被接收 至少一次 。 如果未收到 PUBACK,客户端实现的工作就是保持此保证并因此重新发送消息。在您的应用程序中手动干扰此行为会导致有关客户端持久性的不一致。 为了澄清: 简单地设置 duplicate=true 不会导致邮件被识别为重复邮件。它还必须与原始文件具有相同的 messageID。 我实际上找不到任何关于 paho.js 保持服务质量 = 1 的文档。 但是,MQTT.js 会。

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.

总结一下:

  • 客户端对象的工作是重新发送消息,但没有收到 PUBACK。这是 MQTT specification.
  • 的一部分
  • 使用 MQTT.js 在 Websockets 上工作并确保保持 QoS levels

希望这对您有所帮助。