2017-03-28 134 views
1

我正在嘗試使用OkHttp實現基於HTTP/2的協議的客戶端。該協議基本上是一個通過自定義TCP協議的未加密的HTTP/2-Prior-Knowledge流(是的,我知道它已經壞了,不,我不能改變它)。擴展OkHttp協議選擇

OkHttp3似乎只支持使用TCP的HTTP/2預先知識,所以我建立了一個自定義的SSLSocketFactorySSLSocket來實現我的協議。這是hacky,但工作正常,直到事先知識需求開始。我的遠程不支持HTTP/1.1-> HTTP/2升級,它需要事先的知識,OkHttp似乎只支持通過TLS擴展,但協議選擇代碼is platform-dependent

有什麼辦法可以掛鉤協議選擇邏輯,它不涉及重新實現OkHttp的一半或反映到OkHttp或JDK內部的類中?也許即使沒有假的TLS黑客?替換RealConnection看起來不太可行,因爲okhttp沒有提供您可以實現的任何種類的ConnectionFactory

回答

1

OkHttp只會通過HTTPS和ALPN進行HTTP/2操作。由於您堅持使用自己的自定義協議,因此請考慮通過位於自定義協議前的HTTPS服務器添加HTTP/2。你可以用nginx做到這一點?