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