这篇文章是参考简书作者
ChaoYoung
的
Android WebSocket实现即时通讯功能 写的,不过侧重点是如何使用 Websocket,通过阅读本篇文章你可以学到目录中的内容,重点不放在即时通讯
简介
WebSocket,简而言之,就是一个可以建立长连接的全双工(full-duplex)通信协议,允许服务器端主动发送信息给客户端
对于使用websocket协议,Android端已经有些成熟的框架了,现在学习一下Java-WebSocket这个开源框架
基本使用
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) {