SPDY 多路复用使请求比 HTTP 慢

Posted

技术标签:

【中文标题】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());

【讨论】:

以上是关于SPDY 多路复用使请求比 HTTP 慢的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OkHttp 上进行多路复用?

除了多路复用和服务器推送之外,是啥让 http/2 比 http/1 更快?

什么是 http 请求多路复用器?

IO多路复用/基于IO多路复用+socket实现并发请求/协程

http2多路复用

什么是http2的多路复用