我正在尝试在 android 应用程序中实现连接故障转移。基本上我有应用程序使用 websocket 连接的 URL 列表,如果无法连接任何 url,我需要尝试第二个连接。我用来在 android 端与 websocket 连接的 API 不是同步的。因此,当我在执行此方法后开始连接到 websocket 时,我不知道是否建立连接,直到调用 OnOpen 方法,然后我在那里设置了一些布尔值以供进一步使用。
我尝试了什么:我想到的一个解决方案是开始从线程调用 connect 方法,如果在时间跨度内调用 OnOpen 方法可以,则将其休眠一段时间,否则尝试使用第二个连接 url。
有人可以给我提示我如何解决这个问题。这是一个示例代码(没有线程实现):
private DataUploader() {
// test list of url
urlList = new ArrayList<String>();
urlList.add("192.168.220.197:9001/observation/");
urlList.add("192.168.220.197:9002/observation/");
urlList.add("echo.websocket.org");
connectWebSocket();
}
公共无效连接WebSocket(){
if (urlList.size() > -1) {
String url = urlList.get(index);
this.connect(url);
index++;
}
}
private void connect(String websocketEndPointUrl) {
URI uri;
try {
websocketEndPointUrl = "ws://" + websocketEndPointUrl;
uri = new URI(websocketEndPointUrl);
} catch (URISyntaxException e) {
e.printStackTrace();
return;
}
mWebSocketClient = new WebSocketClient(uri) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
Log.i("Websocket", "Opened");
isReady = true;
}
@Override
public void onMessage(String s) {
///
}
@Override
public void onClose(int i, String s, boolean b) {
Log.i("Websocket", "Closed " + s);
}
@Override
public void onError(Exception e) {
Log.i("Websocket", "Error " + e.getMessage());
}
};
mWebSocketClient.connect();
}