上文中我们提到了HttpDNS,虽然它比系统DNS更优,但终归还是要做DNS操作。而长连接都是IP直接连接,因此没有DNS相关的开销和耗时。
3. 如果有大量网络请求,可以明显减少网络延时,节省带宽
对于大型App而言,存在繁多密集的网络请求,这中间就会存在非常多次的Http断开和重新连接,浪费了很多时间和带宽。而通过长连接通道的话,则没有这部分耗时,直接传输二进制数据即可,节省了每次连接里Header之类的带宽开销。
4. 服务端主动Push数据到客户端
对于上面提到的微信消息接收等场景,如果需要客户端主动去轮询,则会频繁发起请求,对于服务器会产生很大的负载压力,浪费带宽流量。而通过长连接,服务端可以主动把消息下发给客户端,做到最高实时性,且节省流量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xuKLZuin-1650012443119)(https://user-gold-cdn.xitu.io/2019/2/12/168df9c1c2ba7115?imageView2/0/w/1280/h/960/ignore-error/1)]
III. 长连接何时会断开?
正常而言,长连接是不会断开的。大家可以自己试一试,两个socket建立连接,只要网络不变、一切正常,那么这两个socket可以一直互相传送数据,不会断开。
但是,在移动网络下,网络状态复杂多变,比如网络线路被切断、服务器宕机等,都会导致长连接中断。除了这些线路异常外,我们需要关注下面几个长连接断开原因:
1. 长连接所在进程被杀
这个很容易理解,如果我们的App切换到后台,那么系统随时可能将我们的App杀掉,这时长连接自然也就随之断开。
2. 用户切换网络
比如手机网络断开,或者发生Wi-Fi和蜂窝数据切换,这时会导致手机IP地址变更。而我们

本文详细探讨了Android长连接的优势,如减少网络延迟、节省带宽和实现服务端主动Push数据。分析了长连接可能断开的情况,如进程被杀、网络切换等,并提出建立稳定长连接的方法,如独立进程、心跳机制和断开重连策略。还介绍了Mars智能心跳机制和数据协议加密,以及长连接通道建设和容灾方案。
3188

被折叠的 条评论
为什么被折叠?



