我在 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/