【问题标题】: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
          }
          

          【讨论】:

            猜你喜欢
            • 2013-11-29
            • 1970-01-01
            • 1970-01-01
            • 2016-07-08
            • 1970-01-01
            • 2017-07-17
            • 2015-08-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多