Android中SocketIo使用方法

1,984

如果你开发中遇到需要使用长连接的地方,尤其是需要使用到websocket,我们一般都是使用Android-websocket,或者使用okhttp进行链接。不过在众多选择中我比较倾向于使用socketio。socketio最直观的特点就是消息的分类,通过不通的消息分类使得消息的管理更加便捷,这里我简单对SocketIo在Android上的使用做一下说明,服务端的小伙伴请自行寻找其他资料学习。

1.首先,我们需要引入相关的socket.io的开发依赖

implementation 'io.socket:socket.io-client:1.0.0'

2.接着我们为项目添加网络权限

<uses-permission android:name="android.permission.INTERNET"/>

3.接着我们创建socket.io链接

创建Socket对象

private Socket mSocket;

接着初始化mSocket

try {
    IO.Options opts = new IO.Options();
    opts.query = "loginUserNum=" + 78;
    mSocket = IO.socket("http://192.168.0.162:9099", opts);//这里的地址我们用后台提供的
} catch (URISyntaxException e) {
    e.printStackTrace();
}

这里的opts是建立链接时后台接收的一个识别,用于识别是哪个客户端和后台建立的长连接

4.开始链接

mSocket.connect();

5.链接成功回调监听

mSocket.on("connect", new Emitter.Listener() {
    @Override
    public void call(Object... args) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv_lj.setText("链接成功");
            }
        });
    }
});

这里的回调是子线程,所以要注意如果需要更改UI,必须转入主线程中进行更改。

6.消息接收回调监听

mSocket.on("text", new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                tv_content.setText(args[0].toString());
            }
        });
    }
});

7.消息发送

mSocket.emit("text","终于发过去了");

8.链接销毁 

最后不要忘记销毁掉链接

@Override
public void onDestroy() {
    super.onDestroy();
    mSocket.off();
    mSocket.disconnect();
}

9.网络配置

此时你发现依然无法连接成功,不要着急,我们需要加入一个配置

在res下创建xml包,并创建 network_security_config.xml,代码如下

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后在清单文件,即AndroidManifest.xml中application节点下配置

android:networkSecurityConfig="@xml/network_security_config"

到此我们Socket.io的链接就完成了。 我们可以使用这一套代码实现自主的IM即时通讯,心跳建立等。

我们Socket.io的每一条消息都可以给它指定消息的类型,保证我们建立多个socket.io的回调监听不同的消息,实现消息分类。同时Socket.io还支持多平台的接入,能后实现多个平台使用一套框架的目的。