首页 > 编程知识 正文

发送心跳包以保持在线,android最新版本是多少

时间:2023-05-04 13:38:25 阅读:136912 作者:1346

心跳的作用:

TCP长连接本质上不需要靠心跳来维持。 请尝试将两台电脑连接到同一wifi,其中一台连接到服务器,另一台使用没有安装普通KeepAlive的插座连接到服务器。 两台电脑不关机,路由器也不关机,只要DHCP正常租用,就让它保持不动,几小时后在另一台电脑通过之前

那为什么需要心跳包呢? 其实主要是为了防止上述NAT超时,有些NAT设备既然判断是否丢弃NAT映射的依据是一定时间内没有数据,客户端就会积极发送数据。

当然,也可以只为了防止NAT超时,让服务器向客户端发送心跳信号,但其缺点是一旦连接断开,服务器就再也无法连接到客户端。 因此,心跳信号必须由客户端发送,客户端注意到连接已断开,也可以尝试重新连接服务器。

因此,心跳的主要作用是防止NAT超时,其次是检测连接是否断开。

链接断开,无法感知没有写入操作的TCP连接。 此时向服务器发送数据,除非写入超时,否则不知道TCP连接已断开。 如果主动kill一个进程,另一个将关闭TCP连接。 这样,系统代之以发送到服务器的FIN. TCP连接就是这样,它只会明确地接收到来自对方的关闭连接的消息。 (

心跳间隔

既然心率包的主要作用是防止NAT超时,这个间隔有很大的文章。

要发送心跳信号,必须先叫醒设备,然后发送。 如果频繁使用唤醒设备或无法直接使设备进入休眠状态,则会消耗大量电力。 此外,移动网络上的网络通信比wifi上的通信消耗更多的功率。 因此,该心跳的间隔应该尽可能长。 理想情况下,完全没有NAT超时。 例如,正如我之前提到的,同一wifi下的两台电脑完全不需要心跳

现实是残酷的,根据网络上的一些说法,移动时间为2/3G,NAT超时时间为5分钟,中国电信3G应当大于28分钟,理想情况下,客户端应当以稍小于NAT超时时间的间隔发送心跳信号。

wifi会增加NAT的超时时间。 据说宽带网关一般没有空闲释放机制。 在GCM中,wifi上的心跳可能比移动网络上的心跳快。 可能是因为通过wifi进行互联网通信所需的电量比通过移动网络进行的电量少。

服务器处理心跳的方法

如果客户端心跳间隔是固定的,则服务器可以在连接空闲状态超过此时间但未接收到心跳时,将其视为对方已断开,然后断开连接。 客户端心跳动态变化时,上一节提到的微信心跳方式需要设置最大值,超过该最大值才视为对方断开。 如果通过TCP连接主动向客户端发送消息,导致写入超时,也可以直接认为对方已断开连接。

心跳和轮询的区别

心跳和轮询看起来很像。 两者都是客户端主动联系服务器,但差别很大。

轮询是为了获取数据,心跳是为了保持TCP连接。

轮询越频繁,获取数据越及时,心率是否频繁与数据是否及时没有直接关系

轮询的耗电量比心率还高。 因为1次探寻(polling )不需要经由TCP握手3次,挥手4次,在1次心跳中建立或取消TCP连接。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。