IM心跳机制

通常来说IM 一般有联众心跳机制 QoS keep alive
引入心跳机制的目的是保活, 服务器与客户端存在一个联系,

keep Alive

为了TCP或UDP通讯的socket保活而进行的定时向服务端发送keep alive包的机制
一般的keep alive 心跳作用至少有两种:

  • 解决UDP或TCP 端口老化问题(UDP更短)
  • 告诉服务器我还活着(极端情况下,当客户端因程序崩溃等情况而非常退出时,心跳就显得特别重要,尤其在使用UDP这样的“无连接”协议的情况下)。

QOS

消息应答机制,且无论是UDP协议还是TCP协议。应答机制通常是在消息接收者收到消息的同时,马上发送应答包,发送方只需根据这个应答包来决定对方是否真的是否“收到”消息,这就让丢包(当然丢包的情况有很多种可能,UDP协议自身的特殊性只是其中一种)的判定变的简单。

再来讲讲重传机制: 这个重传机制,跟你说的心跳是差不多的,但是用“心跳”可能容易跟Keep alive机制混淆,所以叫定时线程,可能更准确。它的工作原理是,定期检查已发送队列,当包的生存期已过,就表示这个包从未收到应答包,也就认为着它没有被接收方“收到”,那么自动触发重传机制。

当然,应答和重传机制在MobileIMSDK或者其它IM框架里,实际的实现都比我上面描述的要复杂和强大,我只是为了向你简单地描述原理而已。


优化重连机制:
针对心跳的优化:

  1. 精简心跳包
  2. 减少心跳次数
    在聊天过程中,不需要发送心跳包,(一般采用定时器发送,这种会有大量的浪费)
    在使用过程中, 心跳包是不需要的, 在空闲时间才开启心跳机制,(如何保证在空闲时间才会去开启心跳机制)

  3. 重连冷却 在网络环境差的情况下, 会一直进行重连, 如果连接不上,会一直进行重连的,(死循环式连接)
    可以采用 2 次方级重连, 第一次连接失败 2秒后重连,连接失败, 4 秒后重连 。。。。

Copyright © 抓🐱的🐟.com 2017 all right reserved,powered by Gitbook该文件修订时间: 2020-03-13 07:05:40

results matching ""

    No results matching ""