----------------------------------------------------欢迎查看IM软件业务知识《专栏》-------------------------------------------------------------------
使用状态机来保持在线状态 【点击】 拼图算法,将零碎小图,整理到一张大图上【点击】
登录导航 【点击】 会话session的概念【点击】
“假在线’ 【点击】 非对称加密,RSA算法【点击】
如何建立安全socket连接、登录 【点击】 浅谈断线重连、心跳和长在线 【点击】
iOS 客户端创建网络连接,常见错误汇总 【点击】 protocolBuf 在iOS上的使用入门、讲解、指南 【点击】
实现富文本解析【点击】 UITableview Deceleration 加速滑动(惯性滑动)、弹性回归原理【点击】
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
本人也有个几年IM开发经验,对一些IM软件的一些特性有一些总结,跟过业务查看 IM软件业务知识
市面IM软件都有一个基础功能就是长在线(TCP长连接),即只要有网络就保持登录,然而,网络状态是无法预测的,所以IM软件经常会有”离线“状态,,尤其是手机客户端。保持IM处于长在线,则依赖断线重连来完成。
通常来说,网络不稳定是造成不能长时间在线的主要原因,另外还有:服务器强制注销客户端、次客户端被主客户端踢。目前的qq和飞信都有断线重连机制。有时候IM软件自动完成登录,有时候需要用户手动登录。所以,断线重连是一个广泛的概念。可以这么理解:除了从APP登录界面进去的登录,其他都可以称之为断线重连(甚至,把APP杀死,重新启动也是断线重连的一种)
使得IM软件能够长在线,或者短时间内掉线,最好可以做到用户无感知。
广义断线重连:用户已经成功登录IM客户端,用户将程序放到后台、或者手机重启,IM软件再次进入前台,软件可帮助用户实现自动登录。
狭义的断线重:客户端的网络状况是不可预知的,可能从2G切换到3G或者WiFi,或者又切换到2G,甚至“飞行模式”(iOS设备)。客户端要及时对网络的变化做出反应,即尝试进行登录。
【总之】断线重连,一般是网络原因引起的,目的是让IM软件维持在线的状态。
4.IM软件后台运行即将结束。
二、让客户端重连服务器,客户端根据以下几种情况实现重连服务器。为了避免重复登录,当IM软件处于“登录成功”、“连接中”或者“已注销”的几个状态的时候,客户端忽略“网络可达或者切换到前台”的事件。
下面是“心跳失败”引起的断线重连的流程图