2017-06-17 61 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支持。連接可能會發生,我們可以提高覆蓋率。 –

相關問題