【问题标题】:How to check if WebSocket is connected如何检查 WebSocket 是否已连接
【发布时间】:2015-06-21 02:17:21
【问题描述】:

我使用KOUSH库https://github.com/koush/AndroidAsync#can-also-create-web-sockets创建了一个Websocket服务类

现在我想检查 Websocket 是否从我的 mainActivity 连接到我的服务器。你知道我怎么检查这个吗? 谢谢

AsyncHttpClient.getDefaultInstance().websocket(get, "my-protocol", new WebSocketConnectCallback() {
    @Override
    public void onCompleted(Exception ex, WebSocket webSocket) {
        if (ex != null) {
            ex.printStackTrace();
            return;
        }
        webSocket.send("a string");
        webSocket.send(new byte[10]);
        webSocket.setStringCallback(new StringCallback() {
            public void onStringAvailable(String s) {
                System.out.println("I got a string: " + s);
            }
        });
        webSocket.setDataCallback(new DataCallback() {
            public void onDataAvailable(ByteBufferList byteBufferList) {
                System.out.println("I got some bytes!");
                // note that this data has been read
                byteBufferList.recycle();
            }
        });
    }
});

【问题讨论】:

  • 尝试使用它并捕获异常。这会告诉您它是否已连接。其他任何事物都试图预测未来。测试时它可能会上升,而当你去使用它时它可能会下降。那有什么用?

标签: java android performance websocket androidasync-koush


【解决方案1】:

解决方案是将此函数的结果保存到本地 Websocket 变量中,然后检查其状态:

WebSocket webSocket=null;
try {
    webSocket=AsyncHttpClient.getDefaultInstance().websocket(get, "my-protocol", new WebSocketConnectCallback() {
        @Override
        public void onCompleted(Exception ex, WebSocket webSocket) {
            if (ex != null) {
                ex.printStackTrace();
                return;
            }
            webSocket.send("a string");
            webSocket.send(new byte[10]);
            webSocket.setStringCallback(new StringCallback() {
                public void onStringAvailable(String s) {
                    System.out.println("I got a string: " + s);
                }
            });
            webSocket.setDataCallback(new DataCallback() {
                public void onDataAvailable(ByteBufferList byteBufferList) {
                    System.out.println("I got some bytes!");
                    // note that this data has been read
                    byteBufferList.recycle();
                }
            });
        }
    }).get();
}catch(InterruptedException e){
//handle exception 
}catch(ExecutionException e){
//handle exception
}

if(websocket!=null && websocket.isOpen()){
//websocket is working fine 
}

您可以使用其他语句,例如 websocket.isClosed();

【讨论】:

  • isClosed() 不会告诉您对等方是否已断开连接。此代码写入一个字符串和 10 个字节的垃圾。对等体必须准备好接收它。
【解决方案2】:

你可以这样做:

if (mWebSocketClient.isOpen) {
         mWebSocketClient.send(jObj.toString())
} else {
   try {
         client.connectWebSocket(p0)
         mWebSocketClient.send(jObj.toString())
   } catch (e : Exception){
        Toast.makeText(p0, "not connected $e", Toast.LENGTH_LONG).show()
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多