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