日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/8/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 三分钟教你用 Scarlet 写一个 WebSocket App 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者 | 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。