作者 | 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 等工具。

往期推荐

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

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

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

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

点分享

点收藏

点点赞

点在看

三分钟教你用 Scarlet 写一个 WebSocket App相关推荐

  1. python小游戏编程实例-10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目

    另外要注意:光理论是不够的.这里顺便总大家一套2020最新python入门到高级项目实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,还可以跟老司机交 ...

  2. python什么工作好找女朋友_程序员,三分钟教你用 Python 帮你找一个女朋友

    原标题:程序员,三分钟教你用 Python 帮你找一个女朋友 什么是单身税? 单身税的历史可以追溯到2015年韩国的新政, 低生育率逼得韩国产生了这一政策. 现在我国也要实行这一政策, 很多单身狗就接 ...

  3. 三分钟教你快速选择机器视觉传感器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 六招教您合理选择机器视觉传感器 传感器是一种 ...

  4. python语言表白超炫图形_经验分享 篇二:三分钟教你用Excel制作各种尺寸、底色的证件照...

    经验分享 篇二:三分钟教你用Excel制作各种尺寸.底色的证件照 2018-12-29 07:00:00 654点赞 7174收藏 245评论 一.前言 继上一篇用PPT制作了证件照以后 有的值友反应 ...

  5. python词云代码如何增加字数_3分钟教你用python制作一个简单词云

    原标题:3分钟教你用python制作一个简单词云 首先需要安装三个包: 1.制作英文字母的词云 效果图: 代码实现: 其中,test.txt文件内容如下 2.制作中文的词云 效果图: 代码实现: 其中 ...

  6. 三分钟教你读懂支票是什么

    三分钟教你读懂支票是什么 支票 1.支票的概念及特点 支票:出票人签发的,委托办理支票存款业务的银行或其他金融机构在见票时无条件支付确定金额给收款人或持票人的票据. 支票必填项:支票字样.确定的金额. ...

  7. 元件怎么反转_电气图纸怎么看?三分钟教你学会看懂,受用一生

    图纸一般用于设计方面,设计师绘制出图纸,我们再根据图纸进行操作,尤其是电气图纸,上面有很多符号,很难看懂,下面通过三分钟教你学会看懂电气图纸. 一.什么是电气图 用电气图形符号.带注释的围框或简化外形 ...

  8. 手把手教你写一个Matlab App(一)

    对于传统工科的学生用的最多的编程软件应该就是matlab,其集成度高,计算能力强,容易上手,颇受大众青睐.今天挖的这个新坑,主要是分享用matlab app designer设计GUI界面的一些方法和 ...

  9. python程序加密_三分钟教你python自动化加密Word

    还在忧虑周五下班前,老板吩咐要给客户加密200个文件吗?工作到凌晨2点,还要把当日完成的10个文件加密,让人很发狂啊.想到一份份的文档要挨个打开并加密,就让人有一种想要die掉的996即视感. 三分钟 ...

最新文章

  1. 【Python算法】哈希存储、哈希表、散列表原理
  2. mysql的概念和入门语句
  3. React开发(109):引用错误 报错
  4. android 加密显示银行卡号,Android银行卡输入框与卡号显示
  5. 「企业架构」TOGAF的权威指南
  6. 函数图像计算器java版下载_Mathlab图形计算器(Graphing Calculator Mathlab)无广告版下载-Mathlab图形计算器专业版下载v4.14.159-西西软件下载...
  7. 17、Python特征工程,用相关系数法选择数据特征
  8. appcan mysql_AppCan的图片、文件操作、上传、下载操作 From Ken
  9. MySQL数据库的高级SQL语句
  10. 腾讯公布员工数据:超 30 岁员工占近六成
  11. 请求服务器显示非法请求,请求被服务器识别为非法请求, 但使用 postman/curl 可以正常通过...
  12. 邓俊辉 数据结构 习题4-18 Fermat-Lagrange定理代码实现
  13. 微信小程序--优购商城项目(6)
  14. touchjs中,touch的使用
  15. 发电机失磁保护的整定计算
  16. 涉密计算机系统分级保护,什么是分级保护!!
  17. dhu 1.3 反转链表 II
  18. 原生js实现歌词滚动以及卡拉OK效果
  19. JDK1.7和JDK1.8下载
  20. vue3.0树形表格插件vue-table-with-tree-grid(vue.2.0)替换 vxe-table(vue3.0)

热门文章

  1. 【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数
  2. android 访问服务器sql_XSS 攻击、CSRF 攻击、SQL 注入、流量劫持(DNS 劫持、HTTP 劫持)—— 浏览器安全
  3. python dataframe遍历_对Python中DataFrame按照行遍历的方法
  4. imread函数 matlab_地理人,你会用Matlab吗?
  5. scrapy框架_Python:Scrapy框架
  6. methods vue过滤器 和_数据动态过滤技巧在 Vue 项目中的实践
  7. python如何读取数据时出现错误_连接数据库时出现的错误,怎样解决??
  8. 美国世态什么样,看这条“K”线就够了
  9. 这套网红试卷火了!数学老师您应该是文案出身吧?
  10. 数学和古典诗词的意境