android - 将现有的 WebSocket 实现转换为 Android Java 中的 Reactive WebSocket

标签 android websocket rx-java reactive-programming rx-android

我在 Android 中将 OKHttpClient 与 WebSockets 结合使用。 我想将其转换为响应式(Reactive)编程。 如何实现这一目标。 现在我正在为 WebSocket 连接执行此操作。

    // OkHttp Client
    OkHttpClient httpClient = new OkHttpClient.Builder().build();

    // WebSocket Object
    Request request = new Request.Builder().url(url).build();
    mWebSocket = httpClient.newWebSocket(request, new WebSocketListener() {
        // Override methods - OnOpen, OnMessage, OnClosing, OnFailure
    }

    // Then Calling this to make websocket request
    mWebSocket.send(message);

我发现这个库使用 Reactive WebSocket https://github.com/jacek-marchwicki/JavaWebsocketClient

但是没有作为“WebSocketListener”的回调监听器,所以我可以处理消息。

在这方面的任何帮助将不胜感激。谢谢

最佳答案

Tinder 有改造灵感的 websocket 客户端 https://github.com/Tinder/Scarlet

这里除了发送和接收常规消息外,您还可以创建一个 react 流来接收 Websocket.Event 并过滤传入的事件,如 onOpen、onMessage、onFailed 等。

下面是一个关于如何做到这一点的例子。转到上面提供的链接以获取详细示例

//Service declaration similar to retrofit
interface MyWebsocketService{
    @Receive
    Flowable<WebSocket.Event> observeWebSocketEvent();
}

Scarlet scarletInstance = new Scarlet.Builder()
    .webSocketFactory(OkHttpClientUtils.newWebSocketFactory(okhttpClient,"websocket-server-url")
    .addStreamAdapterFactory(new RxJava2StreamAdapterFactory())
    .build();

MyWebsocketService myWebsocketService = scarletInstance.create<MyWebsocketService>();

myWebsocketService.observeWebsocketEvent()
                  .subscribe(event -> {
                      if(event instanceof Websocket.Event.OnConnectionOpened){
                         //do something here
                      }else if(event instanceof Websocket.Event.OnConnectionClosed){
                        //do something here
                      }
                  });

关于android - 将现有的 WebSocket 实现转换为 Android Java 中的 Reactive WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61674345/

相关文章:

javascript - Angular + Websockets + 数据渲染

asynchronous - 如何使用 RxJava 发出多个 API 请求并将它们组合起来?

java - RxJava。将列表的热可观察对象转换为单项流,对其进行处理并转换为列表

rx-java - Observable single 是如何工作的?

java - 并行运行长作业,并且仅在所有作业完成后更新 UI

android - 在android中使用动画的两个 Activity 之间的黑屏

Android - 用于调试和 Release模式的 google-services.json

go - 与 gorilla websocket包并发writeJSON

android - 设置 Listview 的项目高度不起作用

javascript - Socket.io 与 Node.js