【问题标题】:MQTT PUBACK web socketsMQTT PUBACK 网络套接字
【发布时间】:2017-03-22 13:59:45
【问题描述】:

我正在处理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 没有触发。

如果我理解正确或者我做错了什么,请告诉我?

【问题讨论】:

  • 您使用的是什么代理和版本??

标签: javascript websocket mqtt paho hivemq


【解决方案1】:

这不是 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 : 只要客户端没有收到来自服务器的确认,数据包就会被发送和存储。 MQTT 确保它会被接收,但可能有重复。

总结一下:

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

希望这会有所帮助。

【讨论】:

  • 在我的例子中,当我们连接到 mqtt 时,我们推送一条消息并将该消息的status 设为sent,但在某些时候,它是not even reaching tcp of MQTT Server。所以,我们考虑实现PUBACK,如果我们没有收到 puback,我们将再次使用dup flagresend 该消息。
  • 你能推荐一些其他的库,我可以在其中接收网络套接字上的 PUBACK 响应吗?
猜你喜欢
  • 2013-03-18
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多