Java 尽管websocket关闭,但websocket客户端仍有几个连接保持打开状态

Java 尽管websocket关闭,但websocket客户端仍有几个连接保持打开状态,java,node.js,sockets,java-websocket,Java,Node.js,Sockets,Java Websocket,我正在使用socket.io-client 0.6.3制作websocket客户端。我编写了一个连接方法,如下所示:- public void connect(String host, int port) throws Exception { socket = IO.socket(String.format(url, host, port)); //socket connect, disconnect, error event subscribeE

我正在使用socket.io-client 0.6.3制作websocket客户端。我编写了一个连接方法,如下所示:-

public void connect(String host, int port) throws Exception {
        socket = IO.socket(String.format(url, host, port));
        //socket connect, disconnect, error event
        subscribeEvents(socket);
        socket.connect();
    }
其中subscribeEvents方法如下所示

void subscribeEvents(final Socket socket) {
        socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                socket.emit(CommandType.JOINCOMMAND.getValue(), CLIENT_NAME);

            }

        }).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                errorDisconnectListener.onDisconnect();
            }

        }).on(InitialCommandValue.GETAVAILABLEPERSPSETIVESVALUE.getValue(), new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                socket.emit(CommandType.RESPONSECOMMAND.getValue(), commandMessageListener.getPerspectives(args));
            }

        })
.on(Socket.EVENT_ERROR, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                errorDisconnectListener.onError();
            }

        }).on(Socket.EVENT_MESSAGE, new Emitter.Listener() {

            @Override
            public void call(Object... args) {
                commandMessageListener.onMessage(args);
            }

        });
    }
现在,当我收到由于网络问题导致的事件断开连接或错误,或者机器无法访问时,我关闭套接字,如下所示

 this.socket.off();
        this.socket.disconnect();
        this.socket.close();
        this.socket = null;
并再次调用connect方法,直到connect事件给出确认

但问题是,一旦网络进入,所有套接字连接都会重新联机,并开始提供套接字事件(意味着我会得到各种重复事件)

我的要求是,一旦网络断开,处理套接字并尝试一次又一次地连接,直到连接成功(keepalive机制)


有人能帮我找出哪里我错了吗

我可以通过以下选项建立websocket连接来修复它

IO.Options opts = new IO.Options();
    opts.forceNew = true;
    opts.reconnection = false;
    socket = IO.socket(String.format(url, host, port), opts);
一旦websocket关闭,上述选项将使websocket连接释放,并允许创建新的websocket连接

这样我就能够接收单个事件,并使websocket的keepalive机制变得可行