为什么基于TCP的移动端IM仍然需要心跳保活?
2018-08-16 本文已影响0人
GeorgeMR
-
为什么需要检测连接的可用性?
TCP长连接的好处:在当前连接可用的情况下,每一次请求都只是简单的数据发送和接收,免去了DNS解析,连接建立等时间,大大加快了请求的速度,也有利于接收服务器的实时消息。
如果连接无法很好地保持,通过长连接发送请求迟迟没有收到反馈知道超时,又需要一次连接建立的过程,效率甚至还不如HTTP。
基于这个前提,必须要有一种机制用于检测连接的可用性。可以避免移动网络下的连接被回收;服务器可以及时清理无效连接以减轻负载;同时也是业务需求
-
TCP的KeepAlive无法代替应用层心跳保活机制的原因
TCP是一个基于连接的协议,其连接状态是由一个状态机进行维护,连接完毕后,双方都会处于 established 状态 ,这之后的状态并不会主动进行变化。
TCP的KeepAlive 开启后,TCP层将在定时时间到后发送相应的 KeepAlive 探针以确定连接可用性。
TCP KeepAlive 是用于检测连接的死活,即检测双方之间是否还是连接状态。而心跳机制还会检测通讯双方的存货状态,即连接的双方是否能正常通讯。