如何使用 OkHttp 连接 SPDY 网站?

Posted

技术标签:

【中文标题】如何使用 OkHttp 连接 SPDY 网站?【英文标题】:How to use OkHttp to connect to SPDY website? 【发布时间】:2014-08-19 19:15:59 【问题描述】:

我无法让 OkHttp 使用 SPDY 连接到 https://www.google.com。我使用最简单的代码示例向站点发送 GET 请求,并在 OkHttp 源代码中添加了一堆日志,以实现代码一直在创建 HttpConnection,而不是单个 SPDYConnection。此外,ConnectionPool 一直是空的。我确信我错过了一些东西,因为我无法获得任何最大的好处:连接池和 SPDY 在 OkHttp 中工作。

我的客户代码:

for (int i = 0; i < 100; i++) 
  Request request = new Request.Builder().url("https://www.google.com").build();
  Response response = client.newCall(request).execute();

为什么:

没有创建 SPDY 连接? ConnectionPool 总是空的,没有连接被回收?

连接到 SPDY 网站的“正确”方式是什么?

【问题讨论】:

【参考方案1】:

添加

-Xbootclasspath/p:/home/lee/.m2/repository/org/mortbay/jetty/npn/npn-boot/1.1.7.v20140316/npn-boot-1.1.7.v20140316.jar 

to JVM args 为我修复了它。现在我可以看到 SPDY 连接已建立。

【讨论】:

仍然不知道如何在 android 上开启此功能。在 Android 上使用 OkHttp 的 SPDY 对我不起作用。 您使用的是哪个 Android 版本? OkHttp 需要 Android 4.1+ 才能在 Android 上使用 NPN。

以上是关于如何使用 OkHttp 连接 SPDY 网站?的主要内容,如果未能解决你的问题,请参考以下文章

okhttp请求

如何在 HttpClient 4 中使用 SPDY?

SPDY 不适用于 OkHttp

如果客户端支持 SPDY,我如何检测服务器端?

OkHttp3 简述

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