Android Nkzawa SocketIO 断开并建立新连接
Android Nkzawa SocketIO disconnect and make new connection
我正在与 android、socketio (nkzawa) 合作。当我第一次连接时工作正常。但是如果我断开连接并尝试使 "another connection" 永远不会调用 EVENT_CONNECT。
这里我放一些片段
连接时
在 BeforeActivity 内部
@Override
public void onResume() {
super.onResume();
socketManager = (socketManager) socketManager.Instance(this, UrlHelper.URL.replaceAll("\{userId\}", userId.toString());
}
然后我有 class 从 GenericSocket 扩展的 SocketManager,我有一个变量 (SocketManager) 实例用于单例
public static SocketManager Instance(SocketListener listener, String url) {
if (instance == null) {
instance = new socketManager(url);
instance.init();
}
socketManager.listener = (listener)listener;
return instance;
}
套接字的初始化是在 class GenericSocket 中完成的,其中我有一个类型为 (com.github.nkzawa.socketio.client.Socket ) 的变量 tcalled socket
protected void init() {
try {
socket = IO.socket(url);
socket
.on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
onConnect();
JSONObject connectionMessage = getConnectionMessage();
socket.emit(MESSAGE_JOIN, connectionMessage);
}
}).on(MESSAGE, new Emitter.Listener() {
@Override
public void call(Object... args) {
Object data = args[0];
if (data instanceof JSONObject) {
JSONObject json = (JSONObject) data;
try {
onMessage(json.get("content").toString());
} catch (Exception ex) {
Log.e(TAG, ex.getMessage());
}
} else {
onMessage(data.toString());
}
}
}).on(Constant.CONNECTION, new Emitter.Listener() {
@Override
public void call(Object... args) {
Object data = args[0];
if (data instanceof JSONObject) {
JSONObject json = (JSONObject) data;
try {
onMessage(json.get("content").toString());
}
catch(Exception ex) {
Log.e(TAG, ex.getMessage());
}
} else {
onMessage(data.toString());
}
}
}).on(com.github.nkzawa.socketio.client.Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
onDisconnect();
}
});
socket.connect();
}catch (Exception e){
Log.i("Socket connection error: ", e.getMessage());
}
//end socket connection
}
当我断开连接时
SocketManager里面断开是这样的class我有这个方法
public void disconnect() {
this.socket.disconnect();
this.socket=null;
SocketManager.instance = null;
}
谢谢
您的代码看起来不错。尝试将 this.socket.off() 放在 socket.disconnect() 之前。我遇到了一个问题,即使在 disconnect(),socket.off() 为我工作后服务器仍然保持我的连接。
我正在与 android、socketio (nkzawa) 合作。当我第一次连接时工作正常。但是如果我断开连接并尝试使 "another connection" 永远不会调用 EVENT_CONNECT。
这里我放一些片段
连接时
在 BeforeActivity 内部
@Override
public void onResume() {
super.onResume();
socketManager = (socketManager) socketManager.Instance(this, UrlHelper.URL.replaceAll("\{userId\}", userId.toString());
}
然后我有 class 从 GenericSocket 扩展的 SocketManager,我有一个变量 (SocketManager) 实例用于单例
public static SocketManager Instance(SocketListener listener, String url) {
if (instance == null) {
instance = new socketManager(url);
instance.init();
}
socketManager.listener = (listener)listener;
return instance;
}
套接字的初始化是在 class GenericSocket 中完成的,其中我有一个类型为 (com.github.nkzawa.socketio.client.Socket ) 的变量 tcalled socket
protected void init() {
try {
socket = IO.socket(url);
socket
.on(com.github.nkzawa.socketio.client.Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
onConnect();
JSONObject connectionMessage = getConnectionMessage();
socket.emit(MESSAGE_JOIN, connectionMessage);
}
}).on(MESSAGE, new Emitter.Listener() {
@Override
public void call(Object... args) {
Object data = args[0];
if (data instanceof JSONObject) {
JSONObject json = (JSONObject) data;
try {
onMessage(json.get("content").toString());
} catch (Exception ex) {
Log.e(TAG, ex.getMessage());
}
} else {
onMessage(data.toString());
}
}
}).on(Constant.CONNECTION, new Emitter.Listener() {
@Override
public void call(Object... args) {
Object data = args[0];
if (data instanceof JSONObject) {
JSONObject json = (JSONObject) data;
try {
onMessage(json.get("content").toString());
}
catch(Exception ex) {
Log.e(TAG, ex.getMessage());
}
} else {
onMessage(data.toString());
}
}
}).on(com.github.nkzawa.socketio.client.Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
onDisconnect();
}
});
socket.connect();
}catch (Exception e){
Log.i("Socket connection error: ", e.getMessage());
}
//end socket connection
}
当我断开连接时
SocketManager里面断开是这样的class我有这个方法
public void disconnect() {
this.socket.disconnect();
this.socket=null;
SocketManager.instance = null;
}
谢谢
您的代码看起来不错。尝试将 this.socket.off() 放在 socket.disconnect() 之前。我遇到了一个问题,即使在 disconnect(),socket.off() 为我工作后服务器仍然保持我的连接。