Android开发中,关于心跳包的简要介绍

时间:2022-10-13 19:31:08

    在Android开发中,客户端与服务器间的通信通过socket套接字完成,而连接方式主要分为短连接与长连接。

所谓短连接,即通信双方有数据交互时,就建立TCP连接,若数据传送完成时就断开此连接,为了减少通信流量及网络负荷,一般银行和网站的http服务等采用这种连接方式。而长连接,即通信双方有数据交互时就建立TCP连接,有所不同的是在建立的TCP连接上可以发送多个数据包,在TCP连接保持期间,双方如果没有数据交互,则需要双方发送检测包(心跳包)以维持连接。多用于点对点通信频繁时,而且连接数不能太多。

    心跳包的作用主要是在客户端与服务器端通信时,保持两者间的长连接。但是为什么长链接需要心跳包来维系呢?主要由于客户端与服务器端通信时会建立链路连接,当链路一段时间没有通信时,为了减少链路负荷、节省通道资源,链路会被中断。如当一个智能终端连上移动网络时并没有连上Internet,运营商分配给终端的是内网的IP,终端要连上互联网前需经过运营商的网关(NAT)进行IP转换,由于大多数运营商为了减少网关映射表的负荷,当一个链路长时间没有通信时,就会删除在映射表中的相应映射,造成链路中断。正是这种节省通道资源的空闲连接超时释放,要想保证长链接,就不得不以小于超时释放时间(约2分钟)来发送心跳。所以设置心跳的周期不能太长,另外也不能太短,否则会加重服务器的负担。ps:内网机器若不主动向外发起连接,外网机是不能直接连接内网的,这也是内网机安全,不易遭受攻击的原因之一。