如何在 之后每隔x
秒 发出一个固定值 在流上任何y
个非活动状态的第二个长时间?
在我的应用程序中,我在WebSocket周围有一个RxJs包装器。这会从我的客户端应用程序和我的API接收消息。在两者之间有一个NGINX代理,配置为在60秒后终止空闲连接。我已经在我的客户端代码中实现了重试逻辑,以便在连接断开时尝试重新建立websocket连接,并且工作得很好。但这确实意味着我每隔60秒就会看到一次"重新连接..."信息。我想" ping"服务器在不活动期间(即,没有从用户操作或API发送的消息)间隔时间仅为NGINX超时值。这应该导致只看到"重新连接..."当我们有合法的连接失败时。
这是我迄今为止的可观察代码:
const openSubject = new Subject()
const closeSubject = new Subject()
const socketStream = Observable.webSocket({
url: socketUrl,
openObserver: openSubject,
closeObserver: closeSubject
})
socketStream
.retryWhen(errors =>
Observable.range(1, 15)
.zip(errors, attempts => attempts)
.mergeMap(attempts => {
return Observable.timer(attempts * 1000)
})
)
.merge(openSubject.mapTo(actions.socket.opened()))
.merge(closeSubject.mapTo(actions.socket.retrying()))
.subscribe(dispatch, handleSocketError, handleSocketDone)
// messages from client are sent via
socketStream.next(/* ... */)
理想情况下,如果在socketStream
内在非活动阈值内发出消息,我应该 不 查看我的ping / keep-alive observable的任何排放。
我怎样才能做到这一点?我尝试了switchMap
,map().switch()
和race
的各种排列,到目前为止,我所提出的任何内容似乎都无效。