我們知道OkHttp3中有WebSocket可以實現聊天功能,但是我們需要自己定義前後臺交互協議,比較麻煩,而Socket.IO完美的幫我們定義好了這個協議,用起來相當簡單。
Soket.IO文檔在Github上都有
1、爲連接做準備,一般在代碼塊中。
這裏options可以設置一些其他參數,比如重連(默認true),重連次數等。
{
try {
IO.Options options = new IO.Options();
options.transports = new String[]{WebSocket.NAME};
socket = IO.socket("socket地址", options);
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
2、註冊事件監聽,開啓連接;
socket.io有定義好的基本都能用到的事件,然後可以自己定義事件。
private void socketOn() {
if (socket != null) {
socket.on(Socket.EVENT_CONNECT, onConnect);
socket.on(Socket.EVENT_DISCONNECT, onDisconnect);
socket.on(Socket.EVENT_CONNECT_ERROR, onConnectError);
socket.on(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
socket.on("custom_event", onCustom);
socket.connect();
}
}
所有回調都是此形式,args爲回調結果,具體參數可以自己打印出來找一下規律。
private Emitter.Listener onDisconnect = args -> runOnUiThread(() -> {
LogUtil.e(tag, "onDisconnect");
if (args.length == 0) return;
String result = args[0].toString();
});
3、解除事件監聽,關閉連接
private void socketOff() {
if (socket != null) {
socket.disconnect();
socket.off(Socket.EVENT_CONNECT, onConnect);
socket.off(Socket.EVENT_DISCONNECT, onDisconnect);
socket.off(Socket.EVENT_CONNECT_ERROR, onConnectError);
socket.off(Socket.EVENT_CONNECT_TIMEOUT, onConnectError);
socket.off("custom_event", onCustom);
socket.close();
socket = null;
}
}
完事兒了,就這麼簡單,主要就是定義事件,事件回調中取參數,我們項目中result是json格式的,處理起來就比較簡單了。