什么是http2的多路复用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是http2的多路复用相关的知识,希望对你有一定的参考价值。
参考技术A http/1中的每个请求都会建立一个单独TCP连接http1.1中默认开启keep-alive,使得多个请求可以复用一个TCP连接,但是http的传输是一问一答的形式,必须等上一个请求结束才能执行当前请求,所以会受到前面请求的阻塞。
HTTP2采用二进制格式传输,取代了HTTP1.x的文本格式,解析更高效。
多路复用代替了HTTP1.x的序列和阻塞机制,所有的相同域名请求都通过同一个TCP连接并发完成,消除了因多个 TCP 连接而带来的延时和内存消耗。
单个连接上可以并行交错的请求和响应,之间互不干扰
SPDY 多路复用使请求比 HTTP 慢
【中文标题】SPDY 多路复用使请求比 HTTP 慢【英文标题】:SPDY multiplexing makes requests slower than HTTP 【发布时间】:2015-05-01 00:14:21 【问题描述】:我有一个应用程序混合了网络请求、一些小项目 (~20kB) 和一些大项目 (>2mB)。如果我对 SPDY 的理解是正确的,SPDY 会在同一个连接上多路复用请求,因此如果较小的请求落后于较大的请求,它们可能会减慢速度。由于 OkHttp 还不支持请求的优先级,有什么办法可以防止这种情况发生吗?
我尝试使用 OkHttp 客户端处理小请求,使用另一个 OkHttp 客户端处理较大请求,但这似乎并没有解决问题,因为连接似乎在客户端之间共享。
【问题讨论】:
【参考方案1】:SPDY 中的多路复用将请求和响应交错,因此不会有任何调用阻塞另一个调用;它们都只是阻塞了可用带宽。
也就是说,可以创建两个OkHttp
实例,每个实例都有自己的连接池。
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.setConnectionPool(new ConnectionPool());
【讨论】:
以上是关于什么是http2的多路复用的主要内容,如果未能解决你的问题,请参考以下文章