使用RxJS构建心跳服务

时间:2017-03-06 16:18:41

标签: angular typescript observable rxjs5

我想为angular2网站建立一个热门服务。远程设备是网站的主机,客户端应该能够检测设备是否无法访问/脱机。 该服务应定期轮询(网络服务器)远程设备。

我知道失败的HTTP-Call无法直接等同于整个设备的在线/离线状态,但对于我的要求应该足够了。

目前我正在使用以下Observable放置在角度服务中:

  public getStatus() {
    return  this.http.get(this.config.apiEndpoint + this.fileName)
      .map(() => { return '1'; })
      .timeout(500)
      .catch(() => {return '0';})
      .retry()
      .delay(1500)
      .repeat();
  }

observable的目标只是Web服务器上的一个几乎为空的文件。 组件订阅observable / service,然后在设备状态更改时显示通知。

原则上,Observable可以工作,但它为订阅它的组件提供连续的(在线)和零(离线)流。现在我必须向组件(以及使用此服务的每个其他组件)添加一些逻辑来处理例如两个连续的零,通知只显示一次。

如果服务可以执行额外的工作并且仅在设备状态发生变化时向组件提供结果,那么关注点会更清晰,更好。我还尝试使用Observable.timer flatMap,但未能使其正常工作,但我希望rxjs能够解决这个问题。

1 个答案:

答案 0 :(得分:1)

您可以使用distinctUntilChanged运算符,它将确保仅传递不同的值。

希望这会有所帮助!!