百度应用商店优化 百度应用市场优化( 四 )


6.4 备用连接
▲ 备用连接和复合连接
备用连接 , 预备的连接 。它解决的场景是正常发送一个请求当group内无连接可用的时候(何为group?group是管理socket的最小单元 , 内部包含活跃socket , 空闲socket , 连接任务 , 等待请求) 。下面用三个问答来解释备用连接 。
问题一:备用连接是否针对所有请求?
答:答案是肯定的 。
问题二:备用连接的过程是什么样的?
答:当有请求来临时 , 连接池内无连接可用 , 会启动一个定时器开启备用连接 , 定时器的间隔时间是250ms , 与主连接进行竞争 , 如果主连接因为网络抖动或者网络状态不好 , 导致连接失败 , 那么备用连接就直接发送请求 。如果主连接成功 , 那么备用连接就被取消掉 。
问题三:备用连接的目的是什么?
答:在连接池无连接的情况下 , 务必是要创建连接的 , 在主连接之外加一个备用连接 , 会大大提升创建连接的成功率 , 从而提升用户体验 。
6.5 复合连接
复合连接 , 即多条连接 。它解决的场景是为了多个IP地址的连接选取问题 。下面用三个问答来解释复合连接 。
问题一:复合连接是否针对所有请求?
答:答案是肯定的 。复合连接可以全局开关 , 百度App现阶段暂时没有开启复合连接 。
问题二:复合连接的过程是什么样的?
答:众所周知域名DNS查询一般情况下会返回多个IP , 我们以域名查询返回两个IP为例
1)如果结果中存在IPv6的地址 , 那么会优先选用IPv6的地址 , 这个规则follow HappyEyeBall机制(可参考系列一对于HappyEyeBall的介绍) 。
2) 接下来这两个IP会按照顺序尝试建立连接 , 如果第一个IP返回失败 , 将立即开始连接第二个IP 。
3)如果第一个IP率先成功返回 , 那么第二个IP将被加入连接尝试列表并停止所有尝试连接 。
4)如果第一个IP失败 , 会立刻开始第二个IP的连接 。
5)如果第一个IP处于pending状态 , 那么会启动一个定时器 , 默认延迟2s会发起第二个IP的连接 , 如果是多个IP将会递归连接 , 需要特别说明下 , 不同的网络制式延迟时间会不一样 , 这样体验也会更好 。
问题三:复合连接的目的是什么?
答:复合连接的好处是提供最优的IP选取机制 , 但也会带来服务端的高负载 , 所以使用的时候需要进行综合评估 。
七、连接优化的最佳实践
百度App目前客户端网络架构由于历史原因还未统一 , 不过我们正朝着这个目标努力 。
我们的中心思想是以系统网络库的API调用接口为中心 , 上层建立网络门面 , 供外部便捷调用 , 底层通过系统机制以AOP的方式将cronet(chromium的net模块)注入进系统网路库 , 达到双端网络架构统一 , 能力复用 。
下面着重介绍下连接优化在Android和iOS网络架构中的位置及实践 。
7.1 连接优化在Android网络架构的位置及实践
▲ 连接优化在Android网络架构的位置
百度App的Android网络流量目前都在okhttp之上 , 上层进行了网络门面的封装 , 封装内部的实现细节和对外友好的API , 目前我们正在进行重构 , 默认采用Android标准的网络接口HttpURLConnection , 它的底层由系统提供的okhttp的实现 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。