基于okhttp和RxJava封装的自动重连的WebSocket

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布

一 . 概述

1. RxWebSocket是一个基于okhttp和RxJava(RxJava1和RxJava2都支持)封装的WebSocket客户端,此库的核心特点是 除了手动关闭WebSocket(就是RxJava取消订阅),WebSocket在异常关闭的时候(onFailure,发生异常,如WebSocketException等等),会自动重连,永不断连.其次,对WebSocket做的缓存处理,同一个URL,共享一个WebSocket.

2. 由于是基于RxJava封装,所以带来了无限可能,可以和RxBinding,Rxlifecycle一起使用,方便对WebSocket的管理.

项目地址: 欢迎star

重连

重连

项目已经上传Jcenter,依赖方法:

//本项目
compile 'com.dhh:websocket:1.3.0'

//由于项目是基于okhttp,RxJava,RxAndroid编写,所以还需加入如下依赖.
//okhttp,RxJava,RxAndroid
compile 'com.squareup.okhttp3:okhttp:3.9.0'
compile 'io.reactivex:rxjava:1.3.1'
compile 'io.reactivex:rxandroid:1.2.1'

二 . 使用方法

0. 初始化,可以也忽略直接使用.

如果你想使用自己的okhttpClient:

        OkHttpClient yourClient = new OkHttpClient();
        RxWebSocketUtil.getInstance().setClient(yourClient);

是否打印日志:

RxWebSocketUtil.getInstance().setShowLog(BuildConfig.DEBUG);

1.获取一个WebSocket,接收消息,多种方式:

RxWebSocketUtil.getInstance().getWebSocketInfo(url)
                        .subscribe(new Action1<WebSocketInfo>() {
                            @Override
                            public void call(WebSocketInfo webSocketInfo) {
                                mWebSocket = webSocketInfo.getWebSocket();
                                Log.d("MainActivity", webSocketInfo.getString());
                                Log.d("MainActivity", "ByteString:" + webSocketInfo.getByteString());
                            }
                        });

mWebSocket.send("hello word");

        //get StringMsg
        RxWebSocketUtil.getInstance().getWebSocketString(url)
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                    }
                });
        // get ByteString
        RxWebSocketUtil.getInstance().getWebSocketByteString(url)
                .subscribe(new Action1<ByteString>() {
                    @Override
                    public void call(ByteString byteString) {

                    }
                });
        //get WebSocket
        RxWebSocketUtil.getInstance().getWebSocket(url)
                .subscribe(new Action1<WebSocket>() {
                    @Override
                    public void call(WebSocket webSocket) {

                    }
                });
       // 带timeout的WebSocket,当在指定时间内没有收到消息,就重连WebSocket.为了适配小米平板.
       //小米平板测试的时候,出现网络断连,不发送错误,导致不能重连
        RxWebSocketUtil.getInstance().getWebSocketInfo(url,10, TimeUnit.SECONDS)
                .subscribe(new Action1<WebSocketInfo>() {
                    @Override
                    public void call(WebSocketInfo webSocketInfo) {

                    }
                });       

2. 发送消息:

  //用WebSocket的引用直接发
  mWebSocket.send("hello word");

  //url 对应的WebSocket已经打开可以这样send,否则报错
  RxWebSocketUtil.getInstance().send(url, "hello");
  RxWebSocketUtil.getInstance().send(url, ByteString.EMPTY);

  //异步发送,若WebSocket已经打开,直接发送,若没有打开,打开一个WebSocket发送完数据,直接关闭.
  RxWebSocketUtil.getInstance().asyncSend(url, "hello");
  RxWebSocketUtil.getInstance().asyncSend(url, ByteString.EMPTY);
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值