2017-03-06 57 views
0

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

我知道一个失败的HTTP调用不能直接与整个设备的在线/离线状态等同,但对于我的要求应该是足够的。

目前我使用以下可观察其放置的角度服务的内部:

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

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

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

这将是更清洁和中分类当设备的状态改变的服务可以做到这一点额外的工作,只提供一个结果(到组件)。我也尝试使用Observable.timerflatMap但未能使其工作,但我希望rxjs提供了解决此问题的方法。

回答

1

你可以使用distinctUntilChanged运营商,这将确保只传递不同的值。

希望这有助于!

+0

我加入提到运营商和它的作品如预期。 – Akkusativobjekt

+0

编辑:所以它部分解决了我的问题,但后来我意识到组件本身必须知道它是否应该忽略第一个响应,因为服务无法区分它的订户。所以,问题解决了,谢谢! – Akkusativobjekt