Android Okhttp 3に基づくwebSocketエラー再接続と保証長接続(2つのスレッドが交互に行われる)
3343 ワード
ここ数日、websockを使用してリアルタイムで通信し、長時間の接続を保証する需要があります.
WebSocket再接続はスレッドを用いてタイミングよく行う(すなわち,切断後に再接続する).この方法は愚かだと思いますが、この方法は有効です.
1、タイミング接続スレッド、比較的簡単な一つの継承Threadのクラス
2、エラー再接続スレッド
通常の長接続スレッド(ReconnectionWSThread)は、適切な位置でオンにすると、主にエラー再接続(ReconnectionWSErrorThread)と交互に動作します.
OK httpでwebsocket通信をサポート:通信中にエラーが発生したり、接続が切断されたりした場合、onFailureメソッドに戻ります.
onMessageリターン中:
BaseApplition:
附:もっと良い方法があれば、討論の指摘を歓迎して、感謝します!!!
WebSocket再接続はスレッドを用いてタイミングよく行う(すなわち,切断後に再接続する).この方法は愚かだと思いますが、この方法は有効です.
1、タイミング接続スレッド、比較的簡単な一つの継承Threadのクラス
public class ReconnectionWSThread extends Thread {
public volatile boolean isStop = false; //
@Override
public void run() {
super.run();
while (!isStop) {
try {
LogUtils.e("ReconnectionWSThread", " --- ReconnectionWSRThread ");
Thread.sleep(10 * 60 * 1000);
//
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2、エラー再接続スレッド
public class ReconnectionWSErrorThread extends Thread {
public volatile boolean isStop = false; //
@Override
public void run() {
super.run();
while (!isStop) {
try {
LogUtils.e("ReconnectionWSErrorThread", " --- ReconnectionWSErrorThread ");
Thread.sleep(2 * 1000);
//
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
通常の長接続スレッド(ReconnectionWSThread)は、適切な位置でオンにすると、主にエラー再接続(ReconnectionWSErrorThread)と交互に動作します.
OK httpでwebsocket通信をサポート:通信中にエラーが発生したり、接続が切断されたりした場合、onFailureメソッドに戻ります.
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
super.onFailure(webSocket, t, response);
BaseApplication.isReconnect = true;//
BaseApplication.BaseReconnectionWSThread.isStop = true; //
if (BaseApplication.isErrorReconnect) { // onFailure
BaseApplication.BaseReconnectionWSErrorThread.start(); //
BaseApplication.isErrorReconnect = false;
} else {
if (!BaseApplication.BaseReconnectionWSErrorThread.isAlive()) { // run , run ,
BaseApplication.BaseReconnectionWSErrorThread = new ReconnectionWSErrorThread(); //
BaseApplication.BaseReconnectionWSErrorThread.start();
}
}
}
onMessageリターン中:
//
if (BaseApplication.isReconnect) {
BaseApplication.BaseReconnectionWSErrorThread.isStop = true;
BaseApplication.isReconnect = false;
BaseApplication.BaseReconnectionWSThread = new ReconnectionWSThread(); //
BaseApplication.BaseReconnectionWSThread.start();
}
BaseApplition:
public class BaseApplication extends Application {
public static boolean isReconnect = false;
public static boolean isErrorReconnect = true;
public static ReconnectionWSThread BaseReconnectionWSThread;
public static ReconnectionWSErrorThread BaseReconnectionWSErrorThread;
@Override
public void onCreate() {
BaseReconnectionWSThread = new ReconnectionWSThread();
BaseReconnectionWSErrorThread = new ReconnectionWSErrorThread();
super.onCreate();
}
public static BaseRequest getBaseRequestInstance(){
return BaseRequestInstance;
}
}
附:もっと良い方法があれば、討論の指摘を歓迎して、感謝します!!!