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格式的,处理起来就比较简单了。

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