OkHttp如何实现接收服务器推送?
How to implement receiving a server push in OkHttp?
在问题 之后,是否有任何示例可以说明如何在客户端接收推送的内容?
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,并且不太可能获得它们。我们正在构建将推送的响应持久保存到缓存中的机制,但这不太可能对应用程序代码可见。有时你会得到更快的响应,因为服务器将它推送到缓存中。
如果您需要这种行为,请查看网络套接字。
在问题 之后,是否有任何示例可以说明如何在客户端接收推送的内容?
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,并且不太可能获得它们。我们正在构建将推送的响应持久保存到缓存中的机制,但这不太可能对应用程序代码可见。有时你会得到更快的响应,因为服务器将它推送到缓存中。
如果您需要这种行为,请查看网络套接字。