Websocket在" 101交换协议"上关闭与EOF异常的连接。响应

时间:2018-05-19 12:31:41

标签: android websocket okhttp3

我在Android应用程序上使用OKHttp3 3.10版。

成功连接和短暂不活动后,OKHttp3 websocket会响应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 :(得分:0)

问题已解决:

抱歉,我应该指定我还在OKHttp3Client websockets上使用了出色的STOMP客户端: https://github.com/NaikSoftware/StompProtocolAndroid,作者:Nickolay Savchenko(NaikSoftware)。该库在实现与OKHttp3 websockets集成的STOMP协议方面做得非常出色。 这是我使用错误的StompClient.over方法提供URL的地方,它将创建一个默认的Websocket实例,该实例的默认套接字读取超时(30秒?)。对我来说,解决方案是使用替代的StompClient.over方法,允许引用OKHttp3Client的应用程序实例。这样,应用程序就可以将期望的超时时间设置为超出所有默认值。

感谢所有尝试帮助我的人。