Внедрить двунаправленную прерывистую передачу данных в ОХТТП - PullRequest
0 голосов
/ 16 октября 2018

Мне было интересно, существует ли способ создать двунаправленный поток (или разрешить несколько отправлений тела HTTP по одному соединению с длинным опросом) в OKHTTP3, для которого не требуется постоянная передача данных между клиентом и сервером.

Для контекста я пытаюсь реализовать систему, в которой могут возникать периодические посылки данных с клиента или сервера через постоянное соединение.Приложение чувствительно к использованию данных, поэтому я не хочу, чтобы клиент отправлял запросы на сервер, чтобы увидеть, готовы ли данные, я просто хочу, чтобы сервер их выдал.

1 Ответ

0 голосов
/ 16 октября 2018
Соединение

A Websocket является идеальным решением вашей проблемы.Это создает постоянное соединение между клиентом и сервером , и обе стороны могут начать отправку данных в любое время.

в OKHTTP вы можетереализуйте это путем

добавления библиотеки в файл Gradle сборки compile 'com.squareup.okhttp3:okhttp:3.6.0'

Создайте класс , который реализует okhttp WebsocketListener interface

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();
  }

Это должно установить соединение с сервером и должносохраняться, пока приложение живое.Я рекомендую прочитать больше на веб-сокетах, если вы - тот же человек, который отвечает за бэкэнд.

...