android - 如何使用 Scarlet 在 Android 上通过 WebSocket 进行连接?
问题描述
来自 README.md 的代码
val scarletInstance = Scarlet.Builder()
.webSocketFactory(okHttpClient.newWebSocketFactory(GDAX_URL))
.addMessageAdapterFactory(MoshiMessageAdapter.Factory())
.addStreamAdapterFactory(RxJava2StreamAdapterFactory())
.build()
版本和依赖:
implementation 'com.tinder.scarlet:scarlet:0.1.8'
implementation "com.github.tinder.scarlet:scarlet-websocket-okhttp:0.1.7"
implementation "com.github.tinder.scarlet:scarlet-stream-adapter-rxjava2:0.2.4"
implementation "com.github.tinder.scarlet:scarlet-message-adapter-moshi:0.2.4"
implementation "com.github.tinder.scarlet:scarlet-lifecycle-android:0.2.4"
解决方案
首先,您应该使用接口声明一个 WebSocket 客户端。使用 Scarlet 注释,例如@Receive
和@Send
来定义您将如何处理 WebSocket 通信,如下例所示:
interface NewsService {
@Receive
fun observeWebSocketEvent(): Flowable<WebSocket.Event>
@Send
fun sendSubscribe(subscribe: Subscribe)
@Receive
fun observeNews(): Flowable<MyNews>
}
下一步是创建 Scarlet 接口的实现并订阅在 WebSocket 连接期间发出的数据流。在以下示例中,使用了 Moshi 和 RxJava,但 Scarlet 提供了其他方式来处理和操作数据。
val scarletInstance = Scarlet.Builder()
.webSocketFactory(okHttpClient.newWebSocketFactory(BASE_URL))
.addMessageAdapterFactory(MoshiMessageAdapter.Factory())
.addStreamAdapterFactory(RxJava2StreamAdapter.Factory())
.build()
//service created
val newsService = scarletInstance.create<NewsService>()
//define websocket event observer
newsService.observeWebSocketEvent()
.filter { it is WebSocket.Event.OnConnectionOpened<*> }
.subscribe({
newsService.sendSubscribe()
})
// news data result
newsService.observeNews()
.subscribe({ news ->
Log.d(TAG, news.toString())
})
推荐阅读
- python - 从 Python 列表中获取属性
- vue.js - v-data-table 中的 v-edit-dialog 在关闭时恢复原始值
- c - 接收到带有 sigaction 的信号时重启进程
- php - 使用 PHP 开发工具包向 Amazon SQS 发送消息时属性不可见
- swift - 无法对 UITableViewController 进行快照,但可以对 UIViewController 进行快照
- python - 想要为 2 列的组合聚合一个小时
- python - Beautiful Soup - urllib.error.HTTPError: HTTP 错误 403: 禁止
- git - 从一个 Git 项目中压缩多个 Pull Request 并将它们合并到另一个中作为一个 PR
- sql - Postgresql 将 SQL XML 编码转换为 SQL JSON 编码
- go - golang中的通用检测器编码?