现在在 OkHttp 3.5 中包含网络套接字,我想使用它。但我有一个问题,如果我平均 30 分钟不使用应用程序,套接字就会断开连接。为什么,我怎么能做“永恒”的连接?第二个问题,我如何检查套接字连接?
单例类
public class ServerSocket {
@Singleton
public OkHttpClient getOkHttpClient(){
return new OkHttpClient();
}
@Singleton
public Request getRequest(){
return new Request.Builder()
.url(Link.url_socket)
.build();
}
}
我的连接类:
OkHttpClient client = serverSocket.getOkHttpClient();
Request request = serverSocket.getRequest();
WebSocketListener webSocketListener = new WebSocketListener() {
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
Log.e("connect socket", "connect socket");
}
@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
Log.e("onMessage", text);
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
super.onMessage(webSocket, bytes);
Log.e("onMessage", "onMessage");
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
super.onClosing(webSocket, code, reason);
Log.e("onClosing", "onClosing");
}
@Override
public void onClosed(WebSocket webSocket, int code, String reason) {
super.onClosed(webSocket, code, reason);
Log.e("onClosed", "onClosed");
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
Log.e("onFailure", "onFailure");
}
};
socket = client.newWebSocket(request, webSocketListener);
最佳答案
是okhttp的bug,查一下这个issue https://github.com/square/okhttp/issues/3197 .
关于android - OkHttp 3.5 webSocket 不保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160387/