如何使用Koush AndroidSync关闭/重试/管理WebSocket?

如何使用Koush AndroidSync关闭/重试/管理WebSocket?,android,websocket,androidasync-koush,Android,Websocket,Androidasync Koush,我正在为WebSocket客户端使用Koush的AndroidSync。我的代码遵循at的示例,并且有效。(下面复制了一个示例。) 我需要我的应用程序在启动时打开websocket,但是,我需要处理一些问题: A) 我需要允许用户更改websocket服务器的地址。在这种情况下,我需要关闭现有的websocket(可能已经失败),并打开一个指向新服务器的websocket B) 服务器可能已关闭或不可用。在这种情况下,我想向活动汇报。目前它只是默默地失败了 因此,按照重要性的顺序: 如何关闭we

我正在为WebSocket客户端使用Koush的AndroidSync。我的代码遵循at的示例,并且有效。(下面复制了一个示例。)

我需要我的应用程序在启动时打开websocket,但是,我需要处理一些问题:

A) 我需要允许用户更改websocket服务器的地址。在这种情况下,我需要关闭现有的websocket(可能已经失败),并打开一个指向新服务器的websocket

B) 服务器可能已关闭或不可用。在这种情况下,我想向活动汇报。目前它只是默默地失败了

因此,按照重要性的顺序:

  • 如何关闭websocket
  • 如何有效地打开新地址的websocket?(我可以重用AsyncHttpClient吗?)
  • 如何重试失败或丢失的连接
  • 如何提供连接失败/关闭的通知
  • 如果这是某处记录,请让我知道

    从网站复制的示例代码如下:

    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();
                }
            });
        }
    });
    
    我阅读了的源代码

    如何关闭
    WebSocket
    接口从
    DataEmitter
    接口继承
    close()
    方法。 调用
    close()
    方法将关闭WebSocket连接,但请注意 实现(
    WebSocketImpl.close()
    )不执行 那是 要求的

    另外,
    WebSocketImpl
    中的
    onDisconnect()
    在收到请求时不执行结束握手
    

    因此,在任何情况下,都不会执行结束握手。但事实并非如此 如果不介意服务器端的错误日志,这将是一个严重的问题

    如何重试&如何提供通知 您可以通过设置回调来检测断开连接
    setClosedCallback()
    方法和
    setEndCallback()
    方法,但我不确定

    如何重试以及如何提供通知取决于您。你能行 在检测到断开连接后,按您的喜好进行操作

    推荐 如果希望接收WebSocket上发生的细粒度事件 想知道有关错误的详细信息, 试试。 它的 有许多回调入口点,它定义了细粒度 . 新的WebSocket客户端库执行以下操作:
    正确。

    您能否提供一个如何从WebSocketConnectCallback外部调用close()的示例?我不清楚如何修改示例代码以执行关闭。例如,如果我定义mWebSocketConnectCallback=newWebCokeCtConectCallback(){…};mAsyncHttpClient=AsyncHttpClient.getDefaultInstance();websocket(mHostAddress,null,mWebSocketConnectCallback);我可以使用mAsyncHttpClient关闭连接吗?我还没有尝试过,但是这个怎么样?Future f=AsyncHttpClient.getDefaultInstance().websocket(…);WebSocket ws=f.get();ws.close();这适用于关闭WS。我仍然需要查看setClosedCallback()和setEndCallback()来真正管理连接。我还将介绍nv websocket客户端,因为管理我的连接非常重要,所以我将看看该库是否为我提供了一种简单的方法。我真的需要一种简单但高度可靠的方法,通过不可靠的网络链接创建、关闭和维护websocket。谢谢我认为你们的图书馆很容易使用和维护。我在搜索同样问题的信息。同意@March3April4。Takahiko的库更容易实现,并且更好地处理websocket断开连接。还可以更容易地实现回调。我建议迁移库,而不是尝试解决它。我花了大约一个小时进行故障排除并找出解决方法,但花了5分钟迁移到Takahiko的库。