Java 套接字重新连接逻辑

Java 套接字重新连接逻辑,java,android,sockets,websocket,Java,Android,Sockets,Websocket,我正在使用以下适用于Android的websocket库: 只要当前活动处于活动状态,我希望能够在断开连接时每5秒重新连接一次。这是我的逻辑 @Override public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception { Log.e(TAG, "connected"); mIsActiv

我正在使用以下适用于Android的websocket库:

只要当前活动处于活动状态,我希望能够在断开连接时每5秒重新连接一次。这是我的逻辑

    @Override
    public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception {
        Log.e(TAG, "connected");
        mIsActivityAlive = true;
        super.onConnected(websocket, headers);
    }

    @Override
    public void onDisconnected(WebSocket websocket, WebSocketFrame serverCloseFrame, WebSocketFrame clientCloseFrame, boolean closedByServer) throws Exception {
        super.onDisconnected(websocket, serverCloseFrame, clientCloseFrame, closedByServer);
        Log.e(TAG, "disconnected");
        if (mIsActivityAlive) {
            while(!mWs.isOpen()) {
                Thread.sleep(5 * 1000);
                Log.e(TAG, "reconnecting");
                connectWs();
            }
        }
    }

public void connectWs() {
    try {
        mWs = new WebSocketFactory().setConnectionTimeout(5 * 1000).createSocket("MY_WS_URL");
        mWs.addListener(wsAdapter);
        mWs.connectAsynchronously();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
@覆盖
未连接的公共void(WebSocket、WebSocket、映射头)引发异常{
Log.e(标记“已连接”);
mIsActivityAlive=true;
超级未连接(websocket、标题);
}
@凌驾
public void onDisconnected(WebSocket WebSocket、WebSocketFrame serverCloseFrame、WebSocketFrame clientCloseFrame、boolean closedByServer)引发异常{
super.onDisconnected(websocket、serverCloseFrame、clientCloseFrame、closedByServer);
Log.e(标签“断开”);
如果(错误活动活着){
而(!mWs.isOpen()){
线程。睡眠(5*1000);
Log.e(标签“重新连接”);
connectWs();
}
}
}
public-void-connectWs(){
试一试{
mWs=newWebSocketFactory().setConnectionTimeout(5*1000).createSocket(“我的URL”);
addListener(wsAdapter);
mWs.connectAsynchronously();
}捕获(IOE异常){
e、 printStackTrace();
}
}

此逻辑工作正常-但是,在重新连接websocket之后,它会继续尝试重新连接。我以为有了
!while循环中的mWs.isOpen
将解决此问题。我在
onConnected
回调中记录了
mWs.isOpen
,它是
true
,但是它在
onDisconnected
回调中不断出现
false
。我觉得这与
线程有关。sleep
,但我不确定从哪里开始查找。

@efekctive我需要更改web套接字api的源代码吗?换句话说,我应该在哪里将布尔值声明为原子?@efekctive这不是问题所在,问题在于
mWs.isOpen()
为什么需要循环?如果它尝试重新连接但失败了,它不会再次陷入断开连接的状态吗?我没有websocket的经验,但重新连接时使用与第一次连接时相同的回调系统似乎是很自然的。@Vincee好主意,如果你看一下逻辑,我会研究一下。未触发onConnected事件,因此套接字未打开