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

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

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

展开
收起
你鞋带开了~ 2024-03-06 10:27:10 721 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
    赞同 展开评论 打赏

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

相关产品

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

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