尽管 websocket 关闭,但与 websocket 客户端的几个连接仍保持打开状态
Several connections remain open with websocket client inspite of websocket close
我正在使用 socket.io-client 0.6.3 https://github.com/socketio/socket.io-client-java 来制作 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事件给出确认。
但问题是,一旦网络进入,所有套接字连接都会恢复在线并开始提供套接字事件(意味着我得到各种重复事件)。
我的要求是,一旦网络消失,处理socket并反复尝试连接,直到连接成功(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 机制可行。
我正在使用 socket.io-client 0.6.3 https://github.com/socketio/socket.io-client-java 来制作 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事件给出确认。
但问题是,一旦网络进入,所有套接字连接都会恢复在线并开始提供套接字事件(意味着我得到各种重复事件)。
我的要求是,一旦网络消失,处理socket并反复尝试连接,直到连接成功(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 机制可行。