Android WebSocket实现即时通讯功能


这篇文章是参考简书作者 ChaoYoungAndroid WebSocket实现即时通讯功能 写的,不过侧重点是如何使用 Websocket,通过阅读本篇文章你可以学到目录中的内容,重点不放在即时通讯

简介

WebSocket,简而言之,就是一个可以建立长连接的全双工(full-duplex)通信协议,允许服务器端主动发送信息给客户端

对于使用websocket协议,Android端已经有些成熟的框架了,现在学习一下Java-WebSocket这个开源框架

GitHub地址

基本使用

1、引入

implementation "org.java-websocket:Java-WebSocket:1.4.0"

2、加入权限

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

3、新建客户端类

新建一个客户端类并继承WebSocketClient,需要实现它的四个抽象方法和构造函数

public class JWebsocketClient extends WebSocketClient {
   
   

    public JWebsocketClient(URI serverUri) {
   
   
    	//super(serverUri);
        super(serverUri,new Draft_6455());
        //构造方法中的new Draft_6455()代表使用的协议版本,这里可以不写或者写成这样即可
    }

    @Override
    public void onOpen(ServerHandshake handshakedata) {
   
   
        //websocket连接开启时调用
    }

    @Override
    public void onMessage(String message) {
   
   
		//接收到消息时调用
    }

    @Override
    public void onClose(int code, String reason, boolean remote) {
   
   
		//连接断开时调用
    }

    @Override
    public void onError(Exception ex) {
   
   
		//连接出错时调用
    }
}

4、建立websocket连接

建立连接只需要初始化此客户端再调用连接方法,需要注意的是WebSocketClient对象是不能重复使用的,所以不能重复初始化,其他地方只能调用当前这个Client

初始化客户端时需要传入websocket地址(测试地址:ws://echo.websocket.org)

URI uri = URI.create("ws://echo.websocket.org");
JWebsocketClient client = new JWebsocketClient(uri);

连接时可以使用connect()方法或connectBlocking()方法,建议使用connectBlocking()方法,它多出一个等待操作,会先连接再发送

运行之后,看到打印了onOpen,说明连接建立了
在这里插入图片描述
5、发送消息

if(client!=null && client.isOpen()){
   
   
	client.send("hello");
}

6、关闭socket连接
关闭连接调用close()方法,最后为了避免重复实例化WebSocketClient对象,关闭时一定要将对象置空

 try {
   
   
        if (null != client) {
   
   
            client.close();
        }
    } catch (Exception e) {
   
   
        e.printStackTrace();
    } finally {
   
   
        client = null;
    }

后台运行

如果希望在后台保持运行,需要的是建一个Service,将websocket的逻辑放入服务中运行,让websocket保持连接

1、新建Service
新建一个 Service,在启动 Service 时实例化 WebSocketClient 对象并建立连接,将上面的代码搬到服务里即可

关于 Service 的教程可以查看【达内课程】Service(上)

所以我们创建 JWebSocketClientService

public class JWebSocketClientService extends Service {
   
   
    JWebsocketClient client;

    @Override
    public void onCreate() {
   
   
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
   
   
     
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值