三分钟教你用 Scarlet 写一个 WebSocket App

a924ef2d21d6076c3abcd509484b1e20.gif

作者 | Eason

来源 | 程序员巴士

在移动应用程序中,数据层是屏幕上显示内容的真实来源。然而,在今年早些时候在 Tinder 中集成了 WebSocket API 时,维护它成为了一个令人头疼的问题。为了在 Android 上更轻松地集成 WebSocket,Scarlet应运而生。

WebSocket 是在 Android 应用程序中实现数据层的选项之一,尤其是在应用需要实时更新数据的情况下,例如聊天、在线多人游戏和实时提要。它在客户端和服务器之间建立双向连接。当连接打开时,它们可以以低开销来回发送文本和二进制消息。本文将教大家如何在Android应用中快速实现WebSocket。

设置

要实现 Scarlet,首先将其添加到 app/build.gradle 文件。

dependencies {...// scarletimplementation 'com.tinder.scarlet:scarlet:0.1.12'}

在 Scarlet 提供的示例中,RxJava 用于帮助管理 Web 套接字发送的数据流。在 app/build.gradle 中实现它。

dependencies {// rximplementation 'io.reactivex.rxjava2:rxjava:2.2.21'implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'implementation 'io.reactivex.rxjava2:rxkotlin:2.4.0'
}

如果大家对 Coroutine 和 Kotlin Flow 的支持感到好奇,请参阅此处:https : //github.com/Tinder/Scarlet/issues/114

现在我们设置的重要部分是服务。我们可以使用websocket-echo (wss://websocket-echo.glitch.me)测试我们的 WebSocket;

创建接口函数

接下来,创建一个interface以定义与 WebSocket 通信的函数。

interface EchoService {@Receivefun observeConnection(): Flowable<WebSocket.Event>@Sendfun sendMessage(param: String)
}

如上所示,服务接口看起来与改造非常相似。大家可以使用@Receive注解来观察来自 WebSocket 的数据流,并用于@Send向WebSocket发送或订阅数据。

设置好服务后,我们可以继续在我们的活动中实现服务;在这种情况下,我没有使用任何架构,只是在Activity中实现了服务。

class MainActivity : AppCompatActivity() {...private fun setupWebSocketService() {webSocketService = provideWebSocketService(scarlet = provideScarlet(client = provideOkhttp(),lifecycle = provideLifeCycle(),streamAdapterFactory = provideStreamAdapterFactory(),))}private fun provideWebSocketService(scarlet: Scarlet) = scarlet.create(EchoService::class.java)private fun provideScarlet(client: OkHttpClient,lifecycle: Lifecycle,streamAdapterFactory: StreamAdapter.Factory,) =Scarlet.Builder().webSocketFactory(client.newWebSocketFactory(ECHO_URL)).lifecycle(lifecycle).addStreamAdapterFactory(streamAdapterFactory).build()private fun provideOkhttp() =OkHttpClient.Builder().addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC)).build()private fun provideLifeCycle() = AndroidLifecycle.ofApplicationForeground(application)private fun provideStreamAdapterFactory() = RxJava2StreamAdapterFactory()...
}

测试

现在我们可以通过向 WebSocket 发送一些东西来测试下代码。WebSocket 将在它们检索时发送相同的消息。

class MainActivity : AppCompatActivity() {...private fun sendMessage(message: String) {webSocketService.sendMessage(message)adapter.addItem(Message(message = message, isFromSender = true))}@SuppressLint("CheckResult")private fun observeConnection() {webSocketService.observeConnection().observeOn(AndroidSchedulers.mainThread()).subscribe({ response ->Log.d("observeConnection", response.toString())onReceiveResponseConnection(response)}, { error ->Log.e("observeConnection", error.message.orEmpty())Snackbar.make(binding.root, error.message.orEmpty(), Snackbar.LENGTH_SHORT).show()})}private fun onReceiveResponseConnection(response: WebSocket.Event) {when (response) {is OnConnectionOpened<*> -> changeToolbarTitle("connection opened")is OnConnectionClosed -> changeToolbarTitle("connection closed")is OnConnectionClosing -> changeToolbarTitle("closing connection..")is OnConnectionFailed -> changeToolbarTitle("connection failed")is OnMessageReceived -> handleOnMessageReceived(response.message)}}private fun handleOnMessageReceived(message: MessageScarlet) {adapter.addItem(Message(message.toValue(), false))binding.etMessage.setText("")}private fun MessageScarlet.toValue(): String {return when (this) {is Text -> valueis Bytes -> value.toString()}}...
}

总结

这就是本文讨论的全部内容。Scarlet 是一个很棒的库,可让大家访问在 Android 应用程序中实现 WebSocket。大家可以通过以上教程轻松为自己的应用设置 Scarlet ,特别是如果已经熟悉 Retrofit 等工具。

f057e627a0c521f9a1d3d434504530b2.gif

d59c59734ec10406ddea3dc01c3b6a9a.png

往期推荐

为什么还有这么多的网络故障?

k8s集群居然可以图形化安装了?

用了HTTPS,没想到还是被监控了

快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

1c482be801fde21a81cc4cf43bce0316.gif

点分享

81cffaeb3e068a7379f48ca796726865.gif

点收藏

7caeb73ad06eb5044bec634ec22017de.gif

点点赞

7c70d58522eb6c80f2d1c3f20f6f59ca.gif

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512493.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重磅发布|新一代云原生数据仓库AnalyticDB「SQL智能诊断」功能详解

简介&#xff1a; AnalyticDB For MySQL为用户提供了高效、实时、功能丰富并且智能化的「SQL智能诊断」和「SQL智能调优」功能&#xff0c;提供用户SQL性能调优的思路、方向和具体的方法&#xff0c;降低用户使用成本&#xff0c;提高用户使用ADB的效率 SQL是一种简单易用的业…

技术干货|基于Apache Hudi 的CDC数据入湖「内附干货PPT下载渠道」

简介&#xff1a; 阿里云技术专家李少锋(风泽)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件&#xff0c;本议题将介绍典型 CDC 入湖场景&#xff0c;以及如何使用 Pulsar/Hudi 来构建数据湖&#xff0c;同时将会分享 Hudi 内核设计、新愿景以及社区最新…

学计算机的如何学英语,怎么在电脑上学习英语

2怎样学好英语的最基础方法首先&#xff0c;我们要明白学习英语绝不是看一部动画片&#xff0c;不是一蹴而就的事。要想不下一番苦功夫、不费一点力气就能学好英语&#xff0c;那是绝对办不到的。因此&#xff0c;我们学习英语时&#xff0c;一定要有信心&#xff0c;要有耐心&…

hook 循环点击事件用哪个_JS 事件循环 event loop,看完你可以答对 90% 的事件循环题...

本文不保证能说明透彻&#xff0c;因为它本来就存在着混乱&#xff0c;但力求讲到点子上。比较下面这几个的执行顺序setTimeoutsetIntervalsetImmediate (nodejs 支持&#xff0c;new Promise(cb) 和 promise.then(cb)(promise 是 Promiose 的实例)process.nextTick(nodejs)还有…

探究 Java 应用的启动速度优化

简介&#xff1a; 在高性能的背后&#xff0c;Java 的启动性能差也令人印象深刻&#xff0c;大家印象中的 Java 笨重缓慢的印象也大多来源于此。高性能和快启动速度似乎有一些相悖&#xff0c;本文将和大家一起探究两者是否可以兼得。 作者 | 梁希 高性能和快启动速度&#x…

阿里云刘伟光:金融核心系统将步入分布式智能化的时代

1月18日&#xff0c;阿里云在京发布金融核心系统转型“红宝书”&#xff0c;并推出“金融级云原生工场”&#xff0c;通过新的建设理念和相应的全链路平台技术&#xff0c;以及先进的部署体系&#xff0c;支撑金融机构建设面向未来的新一代分布式智能化核心系统。 阿里云智能新…

计算机动漫设计VR主要学什么,VR动漫制作怎么学?

现在虚拟现实技术的确是火了一把&#xff0c;很多人渐渐都知道了虚拟现实技术的存在&#xff0c;但是虚拟现实技术实际上不是大家了解的那么简单&#xff0c;虚拟现实技术包括的方面其实很多&#xff0c;尤其是在一些视频资源上面&#xff0c;虚拟现实技术可以划分在不同的领域…

5分钟搞定Loki告警多渠道接入

简介&#xff1a; Loki是受Prometheus启发的水平可扩展、高可用、多租户日志聚合系统。用户既可以将Loki告警直接接入SLS开放告警&#xff0c;也可以先将Loki接入Grafana或Alert Manager&#xff0c;再借助Grafana或Alert Manager实现Loki间接接入SLS开放告警。 直接接入 您可…

eclipse手动pom本地包_(转)如何在maven的pom.xml中添加本地jar包

1 maven本地仓库认识maven本地仓库中的jar目录一般分为三层&#xff1a;图中的1 2 3分别如下所示&#xff1a;1 groupId2 artifactId3 version4 jar包的依赖如果要将maven本地仓库中的jar包添加到项目中&#xff0c;直接打开4 xx.pom文件&#xff0c;将改jar包的相关依赖复制po…

Fortinet SD-Branch保障医疗服务机构安全组网

近年来&#xff0c;网络攻击者窃取有价值个人信息的违法行为屡见不鲜&#xff0c;医疗服务机构已成为网络攻击的重要目标。由于医疗服务机构的运营架构多呈分散模式&#xff0c;在应对网络安全及运营方面&#xff0c;尤其面临着更为复杂的安全挑战。网络专业人员匮乏、带宽受限…

当微服务遇上 Serverless | 微服务容器化最短路径,微服务 on Serverless 最佳实践

简介&#xff1a; 阿里云Serverless应用引擎&#xff08;SAE&#xff09;初衷是让客户不改任何代码&#xff0c;不改变应用部署方式&#xff0c;就可以享受到微服务K8sServerless的完整体验&#xff0c;开箱即用免运维。 前言 微服务作为一种更灵活、可靠、开放的架构&#x…

学计算机就业靠谱吗,2018年计算机专业就业怎么样?

由孙中山先生创办的至今已有一百多年办学传统&#xff0c;已经成为一所国内一流、国际知名的现代综合性大学。涉足的领域较广&#xff0c;有法律、医学等领域&#xff0c;每个领域都取得不俗的成绩。该校的计算机专业自开设以来也颇受学生欢迎&#xff0c;2018年计算机专业就业…

neon浮点运算_ARM 浮点运算详解

原标题&#xff1a;ARM 浮点运算详解一&#xff1a;早期 上的浮点模拟器&#xff1a;早期的ARM没有协处理器&#xff0c;所以是由CPU来模拟的&#xff0c;即所需浮点运算均在浮点运算模拟器(float math emulation)上进行&#xff0c;需要的浮点运算&#xff0c;常要耗费数千个循…

Serverless 工程实践 | 细数 Serverless 的配套服务

简介&#xff1a; 上文说到云计算的十余年发展让整个互联网行业发生了翻天覆地的变化&#xff0c;Serverless 作为云计算的产物&#xff0c;或者说是云计算在某个时代的表现&#xff0c;被很多人认为是真正意义上的云计算&#xff0c;关于“Serverless 是什么”这个问题&#x…

程序员在想些什么?拒绝盲猜,CSDN帮你精准洞察 Ta 们的心

CSDN 推出《开发者研究与洞察》服务。基于3200万开发者的资源&#xff0c;从开发者视角出发&#xff0c;聚焦开发者“关注”、“使用”、“体验”三方面&#xff0c;帮助技术推广者打造技术品牌、优化技术产品的市场投放策略、提升技术产品的开发者使用体验&#xff0c;直接聆听…

伴鱼:借助 Flink 完成机器学习特征系统的升级

简介&#xff1a; Flink 用于机器学习特征工程&#xff0c;解决了特征上线难的问题&#xff1b;以及 SQL Python UDF 如何用于生产实践。 本文作者陈易生&#xff0c;介绍了伴鱼平台机器学习特征系统的升级&#xff0c;在架构上&#xff0c;从 Spark 转为 Flink&#xff0c;解…

小型微型计算机系统退回修改,小型微型计算机系统

基本信息期刊名称小型微型计算机系统《中国计算机系统杂志》的英文名称出版周期每月发布了ISSN 1000-1220发布CN 21-1106 / TP邮政编码8-108组织者中国科学院沉阳计算技术研究所出版地: 辽宁省沉阳市期刊首页网址提交URL包含在中/荣誉CSCD核心期刊中国科学引文Pж(AJ)摘要杂志C…

coding ssh端口指定_443 端口的 SSH 服务

SSH 的默认端口是 22 &#xff0c;有时您或您的公司的防火墙会完全屏蔽掉这个端口。如果此时您不方便通过 HTTPS 方式进行 Git 操作&#xff0c;您可以使用 Coding.net 提供的 443 端口的 SSH 服务&#xff0c;您需要确保 SSH 已配置成功&#xff0c;然后执行&#xff1a;$ ssh…

亚信安全发布《2022年网络安全发展趋势及十大威胁预测》

回顾2021年&#xff0c;从防御的角度来看&#xff0c;仍然是充斥着压力和焦虑的一年。勒索软件攻击数量再破纪录、高危漏洞与供应链攻击所造成的持续威胁困扰着大家。 展望2022年&#xff0c;面对数字化、云化、智能化发展的当下&#xff0c;安全更应该放眼于未来。亚信安全期…

Flink 1.14 新特性预览

简介&#xff1a; 一文了解 Flink 1.14 版本新特性及最新进展 本文由社区志愿者陈政羽整理&#xff0c;内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink Meetup 分享的《Flink 1.14 新特性预览》。主要内容为&#xff1a; 简介流批一体Checkpoint 机制性能与效率…