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

基于OkHttp实现SSE客户端:Java流式数据接收实战指南 在实时数据推送场景中,Server-Sent Events(SSE)作为一种基于HTTP长连接的轻量级协议,为服务器向客户端的单向数据流传输提供了标准化的解决方案。其核心原理是通过保持持久的HTTP连接,使服务器能够主动向客户端推送格式化的文本事件流,相比WebSocket更适用于新闻推送、状态更新等单向通信需求。从技术价值看,SSE能天然复用HTTP生态的鉴权、代理等基础设施,降低了实时通信的实现复杂度。在Java工程实践中,OkHttp凭借其对流式响应的原生支持、强大的连接池管理和灵活的拦截器机制,成为 阅读详情

*本篇文章已授权微信公众号 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);

3.关闭WebSocket

Android网络编程:HttpURLConnection到Retrofit2实战指南 网络通信是移动应用开发的核心能力,Android平台提供了从基础到高级的完整网络编程方案。HttpURLConnection作为标准HTTP客户端,适合理解网络通信基本原理;OkHttp通过连接池和拦截器机制提供了高效网络层实现;Retrofit2则在此基础上构建了类型安全的REST客户端。JSON作为轻量级数据交换格式,配合Gson等库可高效处理序列化与反序列化。这些技术在电商、社交、IoT等场景广泛应用,开发者需要根据项目规模选择合适方案,小型项目可从HttpURLConnection入手,中大型项目推 阅读详情

相关推荐

Android中RxJava与Retrofit的工程化实践:稳定、可观测、可降级的网络层设计

在Android开发中,网络请求已远超基础HTTP调用范畴,演变为涉及生命周期管理、线程编排、错误语义化、背压控制与生产可观测性的系统工程。RxJava提供响应式数据流建模能力,Retrofit则通过接口契约实现类型安全的协议映射——二者结合的本质,是构建具备确定性行为、可预测调度、可调试链路的现代化网络基础设施。其技术价值体现在规避ANR、防止内存泄漏、统一错误处理策略及支持实时防抖/重试/缓存等复合场景;典型应用场景包括电商首页加载、搜索实时建议、金融交易状态同步等高稳定性要求模块。本文聚焦真实项目中的

weixin_33719619的博客 357

Http框架OkHttps

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。OkHttps 是 2020 年开源的对 OkHttp3 轻量封装的框架,它独创的异步预处理器,特色的标签,灵活的上传下载进度监听与过程控制功能,在轻松解决很多原本另人头疼问题的同时,设计上也力求纯粹与优雅。链式调用,一点到底BaseURL、URL占位符、HTTP、WebSocketJSON、Xml 等自动封装与解析,且支持与任意格式的数据解析框架集成。

pleaseprintf的博客 1727

Android开源项目精选与开发实践指南

Android开源生态通过AOSP和第三方项目为开发者提供了丰富的技术解决方案。在移动开发领域,开源框架如Xposed和Jetpack Compose通过Hook技术和声明式UI范式,显著提升了开发效率和性能表现。性能优化工具如Matrix和Epic实现了全链路监控和低损耗Hook,而网络库Retrofit与本地存储方案Room则优化了数据处理流程。这些技术不仅解决了Android开发中的常见痛点,更在电商、社交等高频场景中验证了其工程价值。通过合理选择活跃维护的开源项目,开发者可以快速构建高性能应用,其中

weixin_30399155的博客 418

安卓客户端架构解析:从MVVM到网络通信的完整实践

在移动应用开发中,客户端架构设计是构建稳定、可维护应用的核心基础。其核心原理在于通过分层模式(如MVVM)解耦业务逻辑与UI,提升代码的可测试性与可维护性。这一设计的技术价值在于能够高效处理复杂的客户端-服务端数据交互,并优化用户体验。在实际应用场景中,一个典型的安卓客户端需要集成网络通信、数据持久化、状态管理等关键技术模块。以开源项目 xiaozhi-android-client 为例,它完整展示了如何运用 Retrofit 处理 RESTful API 通信,并采用 Kotlin 协程进行高效的异步任务

weixin_42538175的博客 368

APP开发实战:从崩溃、卡顿到抓包逆向,系统化解决常见问题

在移动应用开发中,稳定性与性能是决定用户体验的核心。理解应用崩溃、内存泄漏、界面卡顿等问题的底层原理,是构建高质量应用的基础。这些问题的有效解决,不仅能提升应用的技术价值,确保其流畅稳定运行,还能直接增强用户粘性,覆盖电商、社交、内容消费等多种高频应用场景。本文聚焦工程实践,深入探讨如何利用抓包工具进行网络问题诊断,以及通过代码混淆等技术应对逆向风险,提供从问题定位到系统性防御的完整解决方案,帮助开发者跨越从‘能用’到‘好用’的鸿沟。

weixin_30920853的博客 476

一文读懂水利无人机AI识别算法,概念、需求、解决方案

复亚智能的水利无人机AI识别算法通过先进的技术手段,为水利管理提供了高效、精准的解决方案。随着技术的不断进步和应用的深入,复亚智能的解决方案将在更多水利场景中发挥重要作用,助力智慧水利管理的全面升级。该系统通过搭载在无人机上的传感器和摄像头,结合先进的AI识别算法,实现对河道淤积、漂浮物、船只和水质污染等问题的自动检测和监控。基于大量实飞采集的数据,复亚智能的算法经过严格的训练,能够准确识别各种水利问题。复亚智能的系统具有高度的开放性和兼容性,能够与第三方平台和算法无缝对接,满足不同客户的多样化需求。

foiadrone的博客 1197

【k8s实战】 在离线项目混部 通过kubeflow(tf-operator)部署TensorFlow机器学习任务+prometheus/grafana监控资源使用全过程(最新 图文)

目录在离线混合部署概念最新版kubeflow部署TensorFlow部署二级目录三级目录 在离线混合部署概念 先举一个例子,众所周知的天猫双十一当天的流量非常之大,那么就需要成百上千台服务器构成一个超大集群来提供计算能力,但是双十一过去之后,集群资源就面临着浪费的局面。假设业务分为在线和离线两种模式:在线任务需要资源相对较少,但要求响应时间短;离线任务则不需要对任务进行迅速响应,但是计算量相对较大、占用资源多。那么我们应该怎么在K8S集群上完成这两种业务的部署、并且使得CPU利用率始终维持在一个比较高的水平

Eros1on的博客 1546

利用恒源云云端GPU高效训练YOLOv11模型全流程:从环境搭建到模型部署,让你摆脱硬件束缚

记住,云端GPU的核心优势是“弹性算力+一键环境”,只要把握好这一工具特性,再结合YOLOv11的高性能模型架构,你也能在计算机视觉领域快速落地项目。接下来,我们从工具准备到模型部署,一步步带你实现高效训练,真正帮你解决资源与效率的核心痛点。凭借其在目标检测、实例分割任务上的卓越性能,成为众多开发者的首选。据统计,使用云端GPU训练YOLOv11,在处理百万级数据集时,训练效率较本地普通GPU提升。在安防监控中,YOLOv11可实时检测人员、车辆异常行为,某园区采用该方案后,异常事件识别准确率达。

LXY_LOVE36的博客 213

[ 人力资源面试篇 ] HR 面试题分析详解大集合,看完直怼面试官(二)

那么在这个系列的文章中,我们聊到 HR 面谈什么?并且总结了五十个常见的人力资源面试题,在这里分享给大家。

qq_51577576的博客 1380

YOLOv11 改进 - 下采样 | 轻量化突破:ADown 下采样让 YOLOv11 参量减、精度升

本文介绍了一种轻量级的特征下采样模块 ADown,它结合平均池化与最大池化策略,实现更有效的信息保留与压缩。在传统卷积网络中,特征下采样常造成信息损失,而 ADown 通过双通道并行结构优化了下采样效果,提升了模型的表达能力。在 YOLOv11 中引入 ADown 替换原有的下采样模块后,网络在保持高效性的同时,显著提升了目标检测的精度与稳定性。文章详细介绍了 ADown 的核心代码实现、模块注册流程以及 YOLOv11-ADown 模型的配置和训练方法,为轻量化目标检测模型的优化提供了实用参考。

魔改工程师的博客 1480

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 344

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

第10篇:Agent + 爬虫 = 全自动数据采集专家

在企业级数据采集场景中,传统爬虫的痛点已经到了无法忽视的地步:而Agent + 爬虫的组合,就是这些痛点的终极解决方案。它的核心逻辑是:把爬虫从「人工写死的固定执行脚本」,升级为「能自主分析、自主决策、自主适配、自主修复的智能采集机器人」。我们在生产环境中做过对比测试:传统爬虫开发10个网站的采集脚本需要3人天,而Agent采集机器人只需要3分钟,页面改版后的修复成本从1人天降到了0,采集任务的成功率从62%提升到了95%以上。终端执行以下命令,安装基础依赖,与前9篇环境完全兼容: 二、核心能力拆解:Age

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1576

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Android 常用ADB命令
下一篇: 动手实现一个轻量级无侵入性的RxJava自动注销库RxLifecycle
dhhAndroid
博客等级 码龄10年 12粉丝 4原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值