如何在 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 连接或断开连接?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 socket.io 的版本并更新它

在 android 上解析 socket.io 数据。 (Gottox Socket.IO)

如何在 socket.io CLIENT 上使用回调?

Socket.io被误解了[重复]

在 Android 上发出 socket.io 消息

Java(android)中socket.io的文件描述符?