Socket.IO實現聊天功能

我們知道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格式的,處理起來就比較簡單了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章