2017-06-17 51 views
0

我正在使用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() 

而且我想这些请求视为在同一连接一个独立的流,而不是一个新的连接。我怎样才能做到这一点?

回答

1

如果您的请求符合条件,OkHttp会自动使用相同的套接字。这些请求需要HTTPS,服务器需要支持HTTP/2,并且您的代码必须在Android 5+或Java 9+上运行。

+0

谢谢杰西的回答。我只想更多地了解这一资格标准。如果你能指出我的文档或代码来实现这个逻辑,那将是非常好的。此外,我正在使用JDK-8(-Xbootclasspath)的ALPN。 – shantanu

+0

有关符合条件的文档相当有限。有一个[堆栈溢出问题](https://stackoverflow.com/a/44600875/40013)就是这样。一个挑战是资格标准是随着时间推移而变化的实施细节:在Java 9证明后,未来版本可能会降低ALPN支持。连接可能会发生,我们可以提高覆盖率。 –

相关问题