日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
三分鐘教你用Scarlet寫一個WebSocketApp

在移動應用程序中,數(shù)據(jù)層是屏幕上顯示內容的真實來源。然而,在今年早些時候在 Tinder 中集成了 WebSocket API 時,維護它成為了一個令人頭疼的問題。為了在 Android 上更輕松地集成 WebSocket,Scarlet應運而生。

進賢網站制作公司哪家好,找創(chuàng)新互聯(lián)!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、成都響應式網站建設公司等網站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創(chuàng)新互聯(lián)。

WebSocket 是在 Android 應用程序中實現(xiàn)數(shù)據(jù)層的選項之一,尤其是在應用需要實時更新數(shù)據(jù)的情況下,例如聊天、在線多人游戲和實時提要。它在客戶端和服務器之間建立雙向連接。當連接打開時,它們可以以低開銷來回發(fā)送文本和二進制消息。本文將教大家如何在Android應用中快速實現(xiàn)WebSocket。

設置

要實現(xiàn) Scarlet,首先將其添加到 app/build.gradle 文件。

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

在 Scarlet 提供的示例中,RxJava 用于幫助管理 Web 套接字發(fā)送的數(shù)據(jù)流。在 app/build.gradle 中實現(xiàn)它。

  
 
 
 
  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

現(xiàn)在我們設置的重要部分是服務。我們可以使用websocket-echo (wss://websocket-echo.glitch.me)測試我們的 WebSocket;

創(chuàng)建接口函數(shù)

接下來,創(chuàng)建一個interface以定義與 WebSocket 通信的函數(shù)。

  
 
 
 
  1. interface EchoService {
  2.     @Receive
  3.     fun observeConnection(): Flowable
  4.     @Send
  5.     fun sendMessage(param: String)
  6. }

如上所示,服務接口看起來與改造非常相似。大家可以使用@Receive注解來觀察來自 WebSocket 的數(shù)據(jù)流,并用于@Send向WebSocket發(fā)送或訂閱數(shù)據(jù)。

設置好服務后,我們可以繼續(xù)在我們的活動中實現(xiàn)服務;在這種情況下,我沒有使用任何架構,只是在Activity中實現(xiàn)了服務。

  
 
 
 
  1. class MainActivity : AppCompatActivity() {
  2.     ...
  3.     private fun setupWebSocketService() {
  4.         webSocketService = provideWebSocketService(
  5.             scarlet = provideScarlet(
  6.                 client = provideOkhttp(),
  7.                 lifecycle = provideLifeCycle(),
  8.                 streamAdapterFactory = provideStreamAdapterFactory(),
  9.             )
  10.         )
  11.     }
  12.     
  13.     private fun provideWebSocketService(scarlet: Scarlet) = scarlet.create(EchoService::class.java)
  14.     
  15.     private fun provideScarlet(
  16.         client: OkHttpClient,
  17.         lifecycle: Lifecycle,
  18.         streamAdapterFactory: StreamAdapter.Factory,
  19.     ) =
  20.         Scarlet.Builder()
  21.             .webSocketFactory(client.newWebSocketFactory(ECHO_URL))
  22.             .lifecycle(lifecycle)
  23.             .addStreamAdapterFactory(streamAdapterFactory)
  24.             .build()
  25.             
  26.     private fun provideOkhttp() =
  27.         OkHttpClient.Builder()
  28.             .addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC))
  29.             .build()
  30.             
  31.     private fun provideLifeCycle() = AndroidLifecycle.ofApplicationForeground(application)
  32.     
  33.     private fun provideStreamAdapterFactory() = RxJava2StreamAdapterFactory()
  34.     ...
  35. }

測試

現(xiàn)在我們可以通過向 WebSocket 發(fā)送一些東西來測試下代碼。WebSocket 將在它們檢索時發(fā)送相同的消息。

  
 
 
 
  1. class MainActivity : AppCompatActivity() {
  2.     ...
  3.   
  4.     private fun sendMessage(message: String) {
  5.         webSocketService.sendMessage(message)
  6.         adapter.addItem(Message(message = message, isFromSender = true))
  7.     }
  8.     
  9.     @SuppressLint("CheckResult")
  10.     private fun observeConnection() {
  11.         webSocketService.observeConnection()
  12.             .observeOn(AndroidSchedulers.mainThread())
  13.             .subscribe({ response ->
  14.                 Log.d("observeConnection", response.toString())
  15.                 onReceiveResponseConnection(response)
  16.             }, { error ->
  17.                 Log.e("observeConnection", error.message.orEmpty())
  18.                 Snackbar.make(binding.root, error.message.orEmpty(), Snackbar.LENGTH_SHORT).show()
  19.             })
  20.     }
  21.     private fun onReceiveResponseConnection(response: WebSocket.Event) {
  22.         when (response) {
  23.             is OnConnectionOpened<*> -> changeToolbarTitle("connection opened")
  24.             is OnConnectionClosed -> changeToolbarTitle("connection closed")
  25.             is OnConnectionClosing -> changeToolbarTitle("closing connection..")
  26.             is OnConnectionFailed -> changeToolbarTitle("connection failed")
  27.             is OnMessageReceived -> handleOnMessageReceived(response.message)
  28.         }
  29.     }
  30.     private fun handleOnMessageReceived(message: MessageScarlet) {
  31.         adapter.addItem(Message(message.toValue(), false))
  32.         binding.etMessage.setText("")
  33.     }
  34.     private fun MessageScarlet.toValue(): String {
  35.         return when (this) {
  36.             is Text -> value
  37.             is Bytes -> value.toString()
  38.         }
  39.     }
  40.     
  41.     ...
  42. }

總結

這就是本文討論的全部內容。Scarlet 是一個很棒的庫,可讓大家訪問在 Android 應用程序中實現(xiàn) WebSocket。大家可以通過以上教程輕松為自己的應用設置 Scarlet ,特別是如果已經熟悉 Retrofit 等工具。


文章題目:三分鐘教你用Scarlet寫一個WebSocketApp
鏈接分享:http://m.5511xx.com/article/dhdpode.html