Websocket закрывает соединение с исключением EOF в ответе «101 Switching Protocols» - PullRequest
0 голосов
/ 19 мая 2018

Я использую OKHttp3 версии 3.10 в приложении Android.

После успешного подключения и короткого периода бездействия веб-сокет OKHttp3 выдает EOFException в ответ на 101 Switching Protocols ответ.Это затем отключает сокет, и наше приложение вынуждено снова подключиться.

Есть ли способ контролировать это, чтобы сокет не закрывался?

Это ожидаемое поведение?

Наши тесты на iOS и сервере на одном и том же сервере не показали этого поведения и оставались подключенными, пока приложения явно их не отключили.

Класс RealWebsocket:

public void connect(OkHttpClient client) { ...

   try {
        RealWebSocket.this.listener.onOpen(RealWebSocket.this, response);
        String name = "OkHttp WebSocket " + request.url().redact();
        RealWebSocket.this.initReaderAndWriter(name, streams);
        streamAllocation.connection().socket().setSoTimeout(0);
        RealWebSocket.this.loopReader();
    } catch (Exception var6) {
        RealWebSocket.this.failWebSocket(var6, (Response)null);
    }

(ответ на ответкод 101)

1 Ответ

0 голосов
/ 13 июля 2018

Устранена проблема:

Извините, я должен был указать, что я также использую замечательный клиент STOMP поверх веб-сокетов OKHttp3Client: https://github.com/NaikSoftware/StompProtocolAndroid от Николая Савченко (NaikSoftware).Эта библиотека выполняет исключительную работу по реализации протокола STOMP, интегрированного с веб-сокетами OKHttp3.Вот где я потерпел неудачу, используя неправильный метод StompClient.over для предоставления моего URL, который создаст экземпляр веб-сокета по умолчанию, который будет иметь время чтения сокета по умолчанию (30 секунд?).Решением для меня было использование альтернативного метода StompClient.over, позволяющего ссылаться на экземпляр приложения OKHttp3Client.Это позволяет приложению устанавливать желаемые тайм-ауты за пределами значений по умолчанию.

Спасибо всем, кто пытался мне помочь.

...