2017-03-28 112 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做到这一点?