开发者社区 > 云原生 > 消息队列 > 正文

MQTT平台每隔多长时间 定时检测一次客户端的保活心跳?

MQTT平台每隔多长时间 定时检测一次客户端的保活心跳?

展开
收起
你鞋带开了~ 2024-03-06 10:27:10 94 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    MQTT协议中,客户端和服务器之间的保活心跳检测间隔是由客户端在连接时通过Keep Alive参数来设置的。这个参数定义了连接的最大空闲时间T,超过这个时间客户端必须发送心跳报文PINGREQ给服务器,以证明它还在线。服务器收到心跳请求后会返回PINGRESP响应。

    服务器端并没有一个固定的检测间隔,而是根据客户端设置的Keep Alive时间来期望在这个时间内收到客户端的心跳。如果服务器在1.5倍的Keep Alive时间内没有收到客户端的心跳请求,它可能会认为客户端已经离线,并可能断开连接。

    例如,如果客户端设置的心跳间隔是60秒,那么理论上服务器会期望在每个60秒周期内收到来自客户端的心跳。但这并不意味着服务器每隔60秒就主动去检查一次心跳,而是在超过1.5倍的Keep Alive时间(即90秒)后,如果没有收到心跳,服务器可能会采取断开连接的操作。

    需要注意的是,如果在心跳时间间隔内客户端发布了消息给服务器,那么服务器不需要客户端发送心跳请求也可以确定客户端仍然在线。此外,MQTT协议允许的最大Keep Alive时间是18小时12分15秒,如果设置为0,则表示停用保活机制。

    综上所述,MQTT平台对客户端的保活心跳检测不是基于固定的时间间隔,而是基于客户端设置的Keep Alive参数和服务器的期望。客户端需要在其设置的Keep Alive时间内发送心跳,以保持连接活跃。

    2024-03-06 14:54:28
    赞同 展开评论 打赏
  • 1.5倍心跳时间没有收到客户端的心跳认为客户端因无心跳断开
    --此回答整理自钉群“阿里云 微消息队列 MQTT产品咨询群”

    2024-03-06 10:57:03
    赞同 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载