OkHttp中如何实现接收服务器推送?
Posted
技术标签:
【中文标题】OkHttp中如何实现接收服务器推送?【英文标题】:How to implement receiving a server push in OkHttp? 【发布时间】:2017-05-01 23:29:58 【问题描述】:根据Does OkHttp support HTTP/2 server push?的问题,有没有关于如何在客户端接收推送内容的示例?
OkHttpClient、Request、Response和Http2Connection的交互会是怎样的呢?我知道 Http2Connection 有一个 PushObserver,但是它将如何与 OkHttpClient 和 Request/Response 一起使用?
考虑下面的 sn-p。有一个客户和一个请求。他们将如何与 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);
【问题讨论】:
【参考方案1】:OkHttp 没有用于服务器推送的公共 API,并且不太可能获得它们。我们正在构建将推送响应持久保存到缓存中的机制,但这不太可能对应用程序代码可见。有时您只是得到更快的响应,因为服务器将其推送到缓存中。
如果您需要这种行为,请查看网络套接字。
【讨论】:
OkHttp 3.5.0 现在正式支持 WebSocket。参见示例:howtoprogram.xyz/2016/12/24/websocket-client-example-okhttp以上是关于OkHttp中如何实现接收服务器推送?的主要内容,如果未能解决你的问题,请参考以下文章
Java 消息推送------GoEasy实现服务端推送和web端推送