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

标签 http2 okhttp3 server-push okhttp

追问Does OkHttp support HTTP/2 server push? ,有没有关于如何在客户端接收推送内容的示例?

OkHttpClient、Request、Response和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);
    }

最佳答案

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

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

关于http2 - OkHttp中如何实现接收服务器推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41179802/

相关文章:

android - OkHttp3类未找到异常,但存在于apk的dex文件中

asp.net-mvc-4 - 使用信号器时的 session 超时

ajax - 如何在页面离开时终止长轮询 Ajax 请求

php - net::ERR_HTTP2_PROTOCOL_ERROR 是关于什么的?

rx-java - RxJava2/Retrofit2 - 处理 204 个 PUT 和 DELETE 请求的空值

android - 如何在 Android 设备上使用 http/2 和 Okhttp?

android - 将标签设置为翻新调用,以便稍后通过标签取消

javascript - 是否有实现 Socket.IO 服务器部分的文档?

http - 为不支持 HTTP2 的用户提供 HTTP 版本的网站

http - 在golang中测试http.Pusher和推送功能