三分钟教你用 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 内核设计、新愿景以及社区最新…

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

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

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

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

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

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

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

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

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

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

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…

Flink 1.14 新特性预览

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

2021 年云原生技术发展现状及未来趋势

简介&#xff1a; 作者于雨担任了 2021 年 GIAC 会议云原生专场的出品人兼讲师&#xff0c;组织了前后四个场子的演讲&#xff0c;在这个过程中作者同时作为听众从这些同行的演讲中学到了很多非常有用的知识。本文算是对 2021 GIAC 云原生专场的侧记&#xff0c;管中窥豹&#…

像搭“乐高”一样实现整合式网络安全体系

部署多种防护产品&#xff0c;却无法形成防御合力&#xff0c;是当前很多企业网络安全建设都面临的挑战。网络安全能力整合是企业的刚需&#xff0c;也是行业发展的大势所趋。虽然Gartner 提出的网络安全网格架构&#xff08;CSMA&#xff0c;Cybersecurity Mesh Architecture …

合规安全大考核:移动应用安全策略全盘点

简介&#xff1a; 移动应用涵盖用户大量个人数据&#xff0c;一旦发生泄漏可能对个人、社会造成重大影响&#xff0c;同时对移动应用产业长远的发展来说也是毁灭性打击。移动应用开发者&#xff0c;也应注意开发过程中的规范性、安全性&#xff0c;敬畏安全问题&#xff0c;防范…

禁用计算机f1-f12,win10禁用F1至F12热键转为功能键的技巧

win10禁用F1至F12热键转为功能键的技巧介绍。有网友询问&#xff1a;Win10系统笔记本电脑上的F1-F12键上都变成了开关系统功能开关的快捷键&#xff0c;而失去了F1-F12键本身的快捷键的功能。因为编写程序运行的许多软件都需要使用Fn快捷功能键运行&#xff0c;还有制作Word文档…

Quick BI电子表格: 新手亦可表格自由

简介&#xff1a; 随着企业业务快速增长&#xff0c;单纯的表或交叉表展现的数据模式相对固定&#xff0c;已不能满足企业中不同角色用户、不同业务场景数据可视化分析展现的诉求。在满足业务人员可视化需求层面&#xff0c;Quick BI不仅提供了丰富的图表组件&#xff0c;也提供…

CSDN 十大技术主题盘点-云原生篇

关于2021&#xff0c;我们能看到的技术变化有很多。当云原生向下而生&#xff0c;当分布式数据库席卷而至&#xff0c;当低代码平台扩展了开发的边界&#xff0c;当万物互联蔚然成风……我们看到了太多在2021年形成的变化&#xff0c;但也能看到这些趋势非但没有结束&#xff0…

基于MaxCompute+PAI的用户增长方案实践

简介&#xff1a; 如何通过PAIMaxCompute完成用户增长模型AARRR全链路&#xff0c;包含拉新、促活、留存、创收、分享。 本文作者 李博 阿里云智能 高级产品专家 在过去一年阿里云PAI机器学习团队做了很多偏业务的实践&#xff0c;其中有一条就是基于 MaxComputePAI的产品方案…

Atmosic发布搭载能量收集技术的超低功耗蓝牙5.3 片上系统(SoC)高级产品系列

物联网&#xff08;IoT&#xff09;能量收集无线技术的全球领导者Atmosic今日宣布推出ATM33系列蓝牙5.3高性能片上系统&#xff08;SoC&#xff09;产品&#xff0c;该产品系列将Atmosic已获专利的先进能量收集及超低功耗技术推进到更高的水平。 为减少各种物联网产品高昂的电池…