我想知道是否有一种方法可以在OKHTTP3中创建双向流(或允许多个HTTP正文通过单个长轮询连接发送),而该方法不需要数据在客户端和服务器之间不断地流动。
对于上下文,我正在尝试实现一个系统,在该系统中,可以通过持久连接从客户端或服务器进行间歇的数据推送。该应用程序对数据使用敏感,因此我不希望客户端向服务器发送请求以查看是否已准备好数据,我只希望服务器将其推送。
答案 0 :(得分:0)
Websocket 连接是解决问题的理想解决方案。这样会在 client 和 server 之间建立持久连接,并且双方都可以随时开始发送数据。
在 OKHTTP 中,您可以通过
来实现将库添加到构建gradle文件compile 'com.squareup.okhttp3:okhttp:3.6.0'
创建一个实现okhttp WebsocketListener 接口的 类
private final class MyWebSocketListener extends WebSocketListener {
private static final int CLOSE_STATUS = 1000;
@Override
public void onOpen(WebSocket webSocket, Response response) {
webSocket.send("Hello");
webSocket.close(CLOSE_STATUS, "Goodbye");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
log(text);
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
log(bytes.hex());
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
webSocket.close(CLOSE_STATUS, null);
log("Closing");
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
log(t.getMessage());
}
}
创建一种方法来启动连接
private void connect() {
Request request = new Request.Builder().url("ws://my.websocket.url").build();
MyWebSocketListener listener = new MyWebSocketListener();
WebSocket ws = client.newWebSocket(request, listener);
\\ to shutdown the connection client.dispatcher().executorService().shutdown();
}
这应该与服务器建立连接,并且只要应用程序还处于活动状态就应该一直存在。如果您是后端的负责人,那么我建议您阅读更多关于websockets的信息。