订阅系统主题“客户端上下线”问题

程序订阅了系统主题:客户端上下线; 在机器断网或断点之后,线上收到机器下线(离线)通知比较慢(大约2到3分钟,才能收到回复),请求下如何可以提高离线主题推送的时间呢?

这里面涉及到一个 ”断网“ 的机制问题。对于任何的服务端软件来说,TCP 客户端直接断网,服务侧是无法检查到的,除非:a) TCP 协议层的 KEEPALIVE 超时,才会有 Socket 的断开的事件,但一般默认比较长;b) 应用层协议(例如这里的 MQTT 协议) 的设计者,会加入 心跳机制来检查设备的断网。

解决方案,有几种:

  1. 这属于正常现象,你的设计上要接受这样的延迟存在
  2. 尽量让客户端发送 DISCONNECT 报文来断开 or 减少直接断网的情况。
  3. 缩短客户端的 Keepalive 的时间。(代价是会增加服务侧的 网络IO 等资源的消耗)
  4. 如果需要实时知道,就你的业务层在做一层 Ping/Pong 的逻辑封装来检查。