如何在 android 上检查 socket.io 连接或断开连接?
Posted
技术标签:
【中文标题】如何在 android 上检查 socket.io 连接或断开连接?【英文标题】:How can I check socket.io connect or disconnect on android? 【发布时间】:2014-10-05 11:21:09 【问题描述】:我使用作为服务运行的 socketio.SocketIO 连接到节点服务器。并且,当服务重新启动时,打开 socket.io 而不关闭 socket.io。这是一个问题。 在服务器端建立多个socketIO连接的设备。所以服务器正在膨胀.. !我在 android 上使用 gottox/socketio-java-client。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如何在 android 上检查 socket.io 连接或断开连接?的主要内容,如果未能解决你的问题,请参考以下文章