如何在OKHttp客户端连接中明确打开多个数据流
问题描述:
我正在使用OkHTTP客户端访问HTTP/2服务器。我有一个用例,我想通过同一连接打开多个流。如何在OKHttp客户端连接中明确打开多个数据流
我正在使用以下代码创建OkHTTP客户端。
ConnectionPool connectionPool = new ConnectionPool(5,
CONNECTION_POOL_TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS);
return new OkHttpClient.Builder()
.connectTimeout(5,TimeUnit.SECONDS)
.writeTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.connectionPool(connectionPool)
.build();
此客户端可以在连接池中有5个打开的连接。 现在我想让以下使用上述客户端的请求,
okHttpClient.newCall(request1.build()).execute()
okHttpClient.newCall(request2.build()).execute()
而且我想这些请求视为在同一连接一个独立的流,而不是一个新的连接。我怎样才能做到这一点?
答
如果您的请求符合条件,OkHttp会自动使用相同的套接字。这些请求需要HTTPS,服务器需要支持HTTP/2,并且您的代码必须在Android 5+或Java 9+上运行。
谢谢杰西的回答。我只想更多地了解这一资格标准。如果你能指出我的文档或代码来实现这个逻辑,那将是非常好的。此外,我正在使用JDK-8(-Xbootclasspath)的ALPN。 – shantanu
有关符合条件的文档相当有限。有一个[堆栈溢出问题](https://*.com/a/44600875/40013)就是这样。一个挑战是资格标准是随着时间推移而变化的实施细节:在Java 9证明后,未来版本可能会降低ALPN支持。连接可能会发生,我们可以提高覆盖率。 –