在OKHTTP

时间:2018-10-16 15:35:39

标签: java okhttp okhttp3

我想知道是否有一种方法可以在OKHTTP3中创建双向流(或允许多个HTTP正文通过单个长轮询连接发送),而该方法不需要数据在客户端和服务器之间不断地流动。

对于上下文,我正在尝试实现一个系统,在该系统中,可以通过持久连接从客户端或服务器进行间歇的数据推送。该应用程序对数据使用敏感,因此我不希望客户端向服务器发送请求以查看是否已准备好数据,我只希望服务器将其推送。

1 个答案:

答案 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的信息。