版权声明:本文原创发布于公众号 wingjay,转载请务必注明出处! https://blog.csdn.net/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连接,我们也称之为持久连接
,和长连接并不同。感兴趣可参考此文:《TCP 进阶》。