如何在OkHttp中实现接收服务器推送?

Eru*_*aro 5 server-push okhttp http2 okhttp3

以下问题不OkHttp支持HTTP / 2服务器推送?,是否有任何示例可以说明如何实现在客户端接收推送内容?

OkHttpClient,请求,响应和Http2Connection的互动将如何呢?我知道Http2Connection具有PushObserver,但是它将如何与OkHttpClient和Request / Response一起使用?

考虑下面的代码片段。有一个客户和一个请求。他们将如何与PushObserver一起使用?

    OkHttpClient client = getOkHttpClient();
    Request request = new Request.Builder()
            .url("https://nghttp2.org:443") // The Http2Server should be running here.
            .build();
    try {
        Socket socket = client.socketFactory().createSocket();
        Http2Connection con = new Http2Connection.Builder(true)
            .socket(socket)
            .pushObserver(new PushObserver(){

            @Override
            public boolean onRequest(int streamId, List<Header> requestHeaders) {
                // do something here
                return true;
            }

            @Override
            public boolean onHeaders(int streamId,
                List<Header> responseHeaders, boolean last) {
                // do something here
                return true;
            }

            @Override
            public boolean onData(int streamId, BufferedSource source,
                int byteCount, boolean last) throws IOException {
                // do something here
                return true;
            }

            @Override
            public void onReset(int streamId, ErrorCode errorCode) {
                // do something
            }
        }).build();

    } catch (IOException e) {
        LOG.error("IOException", e);
    }
Run Code Online (Sandbox Code Playgroud)

Jes*_*son 3

OkHttp 没有用于服务器推送的公共 API,并且不太可能获得它们。我们\xe2\x80\x99正在构建机制来将推送的响应持久保存到缓存中,但是\xe2\x80\x99不太可能对应用程序代码可见。有时您会得到更快的响应,因为服务器将其推送到缓存中。

\n\n

如果您需要这种行为,请查看网络套接字。

\n

  • OkHttp 3.5.0现已正式支持WebSocket。请参阅示例:http://howtoprogram.xyz/2016/12/24/websocket-client-example-okhttp/ (2认同)