【问题标题】:How can I check socket.io connect or disconnect on android?如何在 android 上检查 socket.io 连接或断开连接?
【发布时间】:2014-10-05 11:21:09
【问题描述】:
我使用作为服务运行的 socketio.SocketIO 连接到节点服务器。并且,当服务重新启动时,打开 socket.io 而不关闭 socket.io。这是一个问题。
在服务器端建立多个socketIO连接的设备。所以服务器正在膨胀..
!我在 android 上使用 gottox/socketio-java-client。
【问题讨论】:
标签:
android
node.js
websocket
socket.io
【解决方案1】:
检查 Socket 是否使用socket.isConnected() 连接。
如果套接字已连接,这将返回 true
【解决方案2】:
这只是一个想法,所以我不知道限制。请告诉我。
您可以ping服务器以检查连接是否有效。
在安卓中
socket.emit("ping","ping");
socket.on("pong",pingHandler); //EmitterListener
private Emitter.Listener pingHandler=new Emitter.Listener(){
@Override
public void call(final Object... args) {
Log.d("SocketStatus","Connection is active");
});
}
并使服务器返回 ping 响应
socket.on("ping",function(data){
socket.emit("pong","pong"); //from your server ex.Node.js
});
【解决方案3】:
您可以检查 socket.connected 属性:
var socket = io.connect();
console.log('Connected status before onConnect', socket.socket.connected);
socket.on('connect', function() {
console.log('Connected status onConnect', socket.socket.connected);
});
它是动态更新的,如果连接丢失,它将被设置为 false,直到客户端再次拿起连接。使用 setInterval 或类似的东西很容易检查。
另一种解决方案是捕获断开连接事件并自己跟踪状态。
【解决方案4】:
以下是上述 Rafique Mohammed 答案的扩展/修改。正确的方法是尝试在客户端重新连接。
互联网中断(服务器无法将断开连接通知给客户端)。 服务器崩溃(服务器可能/可能无法告诉客户端。服务器重新启动(服务器可以判断,但这只是额外的工作)。重新连接后您还希望重新加入会议室以进行无缝沟通
public void connectAfterDisconnectSocket(String senderActivity) {
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
boolean isConnected = false;
isConnected = mSocket != null && mSocket.connected();
if (!isConnected) {
SocketIOClient socketIOClient = new SocketIOClient();
socketIOClient.connectToSocketIO();
if (senderActivity.equals("A")) {
A.joinChatRoom(room);
}
if (senderActivity.equals("B")) {
B.joinChatRoom(room);
}
}
}
}, 0, 1000); //put here time 1000 milliseconds=1 second
}