什么是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的多路复用的主要内容,如果未能解决你的问题,请参考以下文章

谷歌浏览器不使用 http2 进行多路复用

http2多路复用

白话http2的多路复用

简单讲解一下 http2 的多路复用

简单讲解一下 http2 的多路复用

Okhttp3、http2多路复用POST请求高峰负载时响应时间长