我正在使用 Koush 的 AndroidAsync 作为 WebSocket 客户端。我的代码遵循以下示例https://github.com/koush/AndroidAsync并有效。 (示例复制如下。)
我需要我的应用程序在启动时打开一个 websocket,但是,我需要处理一些问题:
A) 我需要允许用户更改 websocket 服务器的地址。在这种情况下,我需要关闭现有的 websocket(可能已失败)并打开到新服务器的 websocket。
B) 服务器可能已关闭或不可用。在这种情况下,我想将其报告给活动。目前它只是默默地失败了。
所以按照重要性顺序:
- 如何关闭网络套接字?
- 如何有效地打开新地址的 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();
}
});
}
});
我阅读了源代码Android异步.
如何关闭
WebSocket
接口继承close()
方法来自DataEmitter
界面。
呼叫close()
方法关闭WebSocket连接,但要注意
实施(WebSocketImpl.close()
)不执行结束握手这是
要求由RFC 6455.
Also, onDisconnect()
in WebSocketImpl
关闭底层套接字
当它收到一个时不执行关闭握手关闭框架.
因此,无论如何,都不会执行结束握手。但是,这不是
如果您不介意服务器端的错误日志,这将是一个严重的问题。
如何重试以及如何提供通知
您可以通过设置回调来检测断开连接setClosedCallback()
方法和setEndCallback()
方法,但我不确定。
如何重试以及如何提供通知取决于您。你可以做
检测到断开连接后,如您所愿。
推荐
如果您想接收 WebSocket 上发生的细粒度事件并且
想了解错误的详细信息,
尝试nv-websocket-客户端.
Its 监听器接口有很多回调入口点并且定义了细粒度错误代码。
新的 WebSocket 客户端库执行以下操作结束握手正确。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)