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


不同类型的连接池以组合的形式互相复用能力:
1)SSL连接池管理的是SSLSocket , 但SSLSocket又依赖于TCP连接池提供的TCPSocket;
2)HTTP代理连接池如果走HTTP协议 , 那么就需要TCP连接池提供TCPSocket , 如果走HTTPS协议 , 那么就需要SSL连接池提供SSLSocket;
3)SpdySession连接池依赖SSL连接池提供SSLSocket , 这里需要说明下 , 虽然HTTP/2协议没有强制绑定HTTPS , 但是在实际开发中确实都是绑定HTTPS , 百度App使用ALPN来协商HTTP/2;
4)SOCKS连接池管理的SOCKSSocket和SOCKS5Socket都需要依赖TCP连接池提供的TCPSocket , 虽然SOCKS5支持UDP , 但cronet网络库暂时没有实现;
5)WebSocket连接池依赖TCP连接池提供的TCPSocket , 声明下这里没有说明WSS(Web Socket Secure)的情况 。
TCP连接优化是一个比较复杂的内容 , 百度App做了针对性场景优化 , 包括预连接 , 连接重建 , 备用连接 , 复合连接 。
6.2 预连接
▲ 预连接和连接重建
预连接:预先创建好的连接 。它解决的场景是在App使用阶段可以无耗时的获取连接 。下面用四个问答来解释预连接 。
问题一:预连接是否能解决所有网络请求的提前连接建立?
答:答案是否定的 , 预连接需要业务方进行核心业务的评估 , 针对核心的域名进行预连接的建立 。
问题二:预连接既然针对的是特定的域名 , 那么是如何配置的呢?
答:采用域名 连接数的方式进行配置 , 比如https://a.baidu.com|2 , 表示给a.baidu.com这个域名配置两条预连接 , 这里要说明下 , 在HTTP/1.x协议下 , 网络库的实现都会对于单域名有最大连接数的限制 , 不同网络库的个数限制不一样 , 有5个也有6个 , 但对于HTTP/2协议 , 这个连接数就只能是1个 。
问题三:预连接是如何建立的?
答:在网络库初始化的时候 , 会根据使用者的配置延迟5s进行预连接的建立 , 主要是考虑网络库在冷启动下对于启动性能的影响 , 为了保证网络库的整体性能 , 预连接的总个数限制在20个 。
问题四:预连接是如何保持的?
答:在网络库初始化的时候 , 除了进行预连接的建立 , 还会创建一个预连接的定时器 , 这个定时器会每隔31s , 这个值的设定取决于BFE(Baidu Front End , 是七层流量的统一接入系统)和BGW(Baidu Gate Way , 百度自主研发的四层负载均衡平台)对超时的最小值设定 , 根据使用者的配置重新建立连接 。
6.3 连接重建
连接重建 , 将连接重新建立 。它解决的场景是App网络状态发生变化 , IP地址变化 , 导致连接不可用 。下面用三个问答来解释连接重建 。
问题一:连接重建是否针对连接池里的所有连接?
答:答案是肯定的 。
问题二:连接重建的过程是什么样的?
答:在网络状态变化的时候 , 第一步会清除掉连接池里的idle socket , 何为idle socket?即空闲socket , 对于从未使用过的空闲socket超过60秒清除 , 对于使用过的空闲socket超过90秒清除 。第二步重建连接需要等待200ms , 目的是等待DNS先重建完成 。
问题三:连接重建对于性能有影响吗?
答:出于性能考虑 , 连接重建的连接个数限制是100个 。


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