我正在使用Jetty WebSocket Client从客户端建立WebSocket连接。我正在尝试创建一个以Observable形式提供事件流的类。
我设法通过编写一个POJO @WebSocket
类来实现这一点,该类将所有内容发布到SerializedSubject<SocketEvent, SocketEvent> eventSubject = new SerializedSubject<>(PublishSubject.create());
并且一切正常。
每次连接中断时如何重新连接?
我尝试从Observable.interval
和flatMap
开始 - 每个连接返回Observable的Observable<ObservableSocket.SocketEvent> connect(String url)
。
Observable<Long> reconnectObservable = Observable.interval(1000, TimeUnit.MILLISECONDS);
Observable<ObservableSocket.SocketEvent> composed = reconnectObservable.flatMap(aLong -> {
try {
System.out.println("Connect");
return connect(url);
} catch (Exception e) {
System.out.println("Exception: " + e);
return Observable.just(new ObservableSocket.SocketCloseEvent(999, "Exception: " + e));
}
});
问题是,它每1秒创建一个另一个连接。如何使 flatMap 等待内部Observable完成?
答案 0 :(得分:1)
Observable.range(0, Integer.MAX_VALUE).concatMap(tick -> { ... });
concatMap维护一个SerialSubscription,并且一次只能订阅一个发出的observable,等待每个obindable终止。范围提供无限信号(在这种情况下,无穷大结束于大约20亿:P),并且concatMap将根据创建的每个内部可观察量一次连接一个。