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

2025-05-29 0 45

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

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

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

设置

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

  1. dependencies{
  2. //scarlet
  3. implementation'com.tinder.scarlet:scarlet:0.1.12'
  4. }

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

  1. dependencies{
  2. //rx
  3. implementation'io.reactivex.rxjava2:rxjava:2.2.21'
  4. implementation'io.reactivex.rxjava2:rxandroid:2.1.1'
  5. implementation'io.reactivex.rxjava2:rxkotlin:2.4.0'
  6. }

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

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

创建接口函数

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

  1. interfaceEchoService{
  2. @Receive
  3. funobserveConnection():Flowable<WebSocket.Event>
  4. @Send
  5. funsendMessage(param:String)
  6. }

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

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

  1. classMainActivity:AppCompatActivity(){
  2. privatefunsetupWebSocketService(){
  3. webSocketService=provideWebSocketService(
  4. scarlet=provideScarlet(
  5. client=provideOkhttp(),
  6. lifecycle=provideLifeCycle(),
  7. streamAdapterFactory=provideStreamAdapterFactory(),
  8. )
  9. )
  10. }
  11. privatefunprovideWebSocketService(scarlet:Scarlet)=scarlet.create(EchoService::class.java)
  12. privatefunprovideScarlet(
  13. client:OkHttpClient,
  14. lifecycle:Lifecycle,
  15. streamAdapterFactory:StreamAdapter.Factory,
  16. )=
  17. Scarlet.Builder()
  18. .webSocketFactory(client.newWebSocketFactory(ECHO_URL))
  19. .lifecycle(lifecycle)
  20. .addStreamAdapterFactory(streamAdapterFactory)
  21. .build()
  22. privatefunprovideOkhttp()=
  23. OkHttpClient.Builder()
  24. .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC))
  25. .build()
  26. privatefunprovideLifeCycle()=AndroidLifecycle.ofApplicationForeground(application)
  27. privatefunprovideStreamAdapterFactory()=RxJava2StreamAdapterFactory()
  28. }

测试

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

  1. classMainActivity:AppCompatActivity(){
  2. privatefunsendMessage(message:String){
  3. webSocketService.sendMessage(message)
  4. adapter.addItem(Message(message=message,isFromSender=true))
  5. }
  6. @SuppressLint("CheckResult")
  7. privatefunobserveConnection(){
  8. webSocketService.observeConnection()
  9. .observeOn(AndroidSchedulers.mainThread())
  10. .subscribe({response->
  11. Log.d("observeConnection",response.toString())
  12. onReceiveResponseConnection(response)
  13. },{error->
  14. Log.e("observeConnection",error.message.orEmpty())
  15. Snackbar.make(binding.root,error.message.orEmpty(),Snackbar.LENGTH_SHORT).show()
  16. })
  17. }
  18. privatefunonReceiveResponseConnection(response:WebSocket.Event){
  19. when(response){
  20. isOnConnectionOpened<*>->changeToolbarTitle("connectionopened")
  21. isOnConnectionClosed->changeToolbarTitle("connectionclosed")
  22. isOnConnectionClosing->changeToolbarTitle("closingconnection..")
  23. isOnConnectionFailed->changeToolbarTitle("connectionfailed")
  24. isOnMessageReceived->handleOnMessageReceived(response.message)
  25. }
  26. }
  27. privatefunhandleOnMessageReceived(message:MessageScarlet){
  28. adapter.addItem(Message(message.toValue(),false))
  29. binding.etMessage.setText("")
  30. }
  31. privatefunMessageScarlet.toValue():String{
  32. returnwhen(this){
  33. isText->value
  34. isBytes->value.toString()
  35. }
  36. }
  37. }

总结

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

原文地址:https://mp.weixin.qq.com/s/sH1y5D63eYWEL5amgf06AA

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 三分钟教你用 Scarlet 写一个 WebSocket App https://www.kuaiidc.com/89269.html

相关文章

发表评论
暂无评论