在移动应用中,数据层是屏幕显示内容的真实来源。然而,当我们在今年早些时候将WebSocketAPI集成到Tinder中时,维护它就成了一件令人头疼的事情。为了使WebSocket在Android上更容易集成,Scarlet是一个声明式Kotlin库。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:rxjava:2.4.0'}如果大家对协程和KotlinFlow支持感到好奇,请参阅此处:https://github.com/Tinder/Scarlet/issues/114现在我们设置的重要部分是服务。我们可以使用websocket-echo(wss://websocket-echo.glitch.me)来测试我们的WebSocket;创建接口函数接下来,创建一个接口来定义与WebSocket通信的函数。interfaceEchoService{@ReceivefunobserveConnection():Flowable@SendfunsendMessage(param:String)}如上所示,服务接口看起来与改造非常相似。您可以使用@Receive注解观察来自WebSocket的数据流,并使用@Send向WebSocket发送或订阅数据。设置服务后,我们可以继续在我们的活动中实施服务;在这种情况下,我没有使用任何架构,只是在Activity中实现服务。classMainActivity:AppCompatActivity(){...privatefunsetupWebSocketService(){webSocketService=provideWebSocketService(scarlet=provideScarlet(client=provideOkhttp(),lifecycle=provideLifeCycle(),streamAdapterFactory=provideStreamAdapterFactory(),))}privatefunprovideWebSocketService(scarlet:Scarlet)=scarlet.create(EchoService::class.java)privatefunprovideScarlet(client:OkHttpClient,lifecycle:Lifecycle,streamAdapterFactory:StreamAdapter.Factory,)=Scarlet.Builder().webSocketFactory(client.newWebSocketFactory(ECHO_URL)).lifecycle(生命周期).addStreamAdapterFactory(streamAdapterFactory).build()privatefunprovideOkhttp()=OkHttpClient.Builder().addInterceptor(HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC)).build()privatefunprovideLifeCycle()=AndroidLifecycle.ofApplicationForeground(application)privatefunprovideStreamAdapterFactory()=RxJava2StreamAdapterFactory()...}测试现在我们可以通过向WebSocketWebSocket发送一些内容来测试代码将在检索时发送相同的消息。classMainActivity:AppCompatActivity(){...privatefunsendMessage(message:String){webSocketService.sendMessage(message)adapter.addItem(Message(message=message,isFromSender=true))}@SuppressLint("CheckResult")私人乐趣observeConnection(){webSocketService.observeConnection().observeOn(AndroidSchedulers.mainThread()).subscribe({response->Log.d("observeConnection",response.toString())onReceiveResponseConnection(response)},{错误->日志.e("observeConnection",error.message.orEmpty())Snackbar.make(binding.root,error.message.orEmpty(),Snackbar.LENGTH_SHORT).show()})}privatefunonReceiveResponseConnection(response:WebSocket.事件){当(响应){是OnConnectionOpened<*>->changeToolbarTitle(“连接打开”)是OnConconnectionClosed->changeToolbarTitle("connectionclosed")isOnConnectionClosing->changeToolbarTitle("closingconnection..")isOnConnectionFailed->changeToolbarTitle("connectionfailed")isOnMessageReceived->handleOnMessageReceived(response.messageOndate)Mundate}f}消息:MessageScarlet){adapter.addItem(Message(message.toValue(),false))binding.etMessage.setText("")}privatefunMessageScarlet.toValue():String{returnwhen(this){isText->值是Bytes->value.toString()}}...}总结这就是本文的全部内容Scarlet是一个很棒的库,可让您访问在Android应用程序中实现WebSockets。您可以通过上述教程轻松地为您的应用程序设置Scarlet,特别是如果您已经熟悉Retrofit等工具。