版权声明:本文原创发布于公众号 wingjay,转载请务必注明出处! https://blog.youkuaiyun.com/lanxian837820149/article/details/88628573
上一篇文章《Android 架构之网络框架(上)》中,我们谈过了网络框架OkHttp、网络加速方案如HttpDNS、数据压缩与序列化等技术点。本文我们结合腾讯Mars框架和美团Shark体系等业内主流长连接方案,谈一谈长连接技术的各个方面。
本文会包括下面的技术点:
- 长连接与Http短连接、Keep-Alive傻傻分不清
- 你为什么需要长连接
- 长连接何时会断开
- 如何建立稳定长连接
- Mars智能心跳机制
- 长连接数据协议及加密
- 长连接通道建设及容灾
除了大家常用的Http短连接,大型App几乎都会搭建一套完整的TCP长连接网络通道。我们先来看下美团Shark长连接的线上数据:


图片来源 《美团点评移动网络优化实践》
上面两张图片对比了长/短连接的成功率和网络延时数据,这两个是网络模块最重要的衡量指标。可以看出,无论是成功率,还是网络延时,长连接都明显优于短连接。
另外,大家都知道微信的消息收发非常即时,这便归功于背后稳定高可用的长连接系统。实际上,微信除了消息收发,其他的小数据通信都是通过长连接来实现的。
下面我们来讲解一些长连接的一些核心技术点。
I. 长连接与Http短连接、Keep-Alive傻傻分不清
为防止大家对于长连接和短连接混淆,这里先简单说明下几点区别。
1. 长连接 vs Http短连接
这两者分别对应的是TCP协议层的长连接和短连接。
大家都知道,TCP会通过三次握手,建立与服务端的连接,然后传递数据,只不过短连接在数据传输完后,会主动关闭连接,而长连接会继续保持这条连接,后续的数据读写继续使用这条连接。
2. 长连接 vs Http的Keep-Alive
上一篇文章中提到了连接复用,通过Http1.1的Keep Alive字段,我们可以让一条Http连接保持不被立即关闭。有些同学这时就疑惑了,是不是长连接就是Keep Alive呢?
其实不是的。长连接我们也叫TCP长连接,它是架设在TCP协议上的,而上面说的Keep Alive是Http协议的内容,连协议都不同,两者自然不是一个东西。
开启了Keep Alive是Http连接,我们也称之为

本文详细探讨了Android架构中的长连接技术,对比了长连接与Http短连接的区别,阐述了长连接的必要性,如降低网络延时、节省带宽、服务端Push数据。还介绍了可能导致长连接断开的情况,如进程被杀、网络切换等,并提出了建立稳定长连接的方法,包括使用Mars框架、心跳机制和断开重连策略。此外,文章讨论了Mars的智能心跳机制,以及长连接的数据协议和加密。最后,提到了长连接通道建设和容灾措施。
最低0.47元/天 解锁文章
3321

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



