RxJs在一段时间不活动后开始一段时间

时间:2018-02-28 18:18:59

标签: websocket rxjs rxjs5

如何在 之后每隔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的任何排放。

我怎样才能做到这一点?我尝试了switchMapmap().switch()race的各种排列,到目前为止,我所提出的任何内容似乎都无效。

0 个答案:

没有答案