Angular 如何限制服务器事件?
我有一个angular 6应用程序,它通过websocket(更准确地说是sockjs)与服务器进行通信。 我用服务器启动一个任务,REST调用,然后在websocket上收到大量消息。 我的代码的工作方式很糟糕。只要有websocket消息出现,它基本上会锁定屏幕 我当前的代码是组件Angular 如何限制服务器事件?,angular,typescript,asynchronous,rxjs,Angular,Typescript,Asynchronous,Rxjs,我有一个angular 6应用程序,它通过websocket(更准确地说是sockjs)与服务器进行通信。 我用服务器启动一个任务,REST调用,然后在websocket上收到大量消息。 我的代码的工作方式很糟糕。只要有websocket消息出现,它基本上会锁定屏幕 我当前的代码是组件 this.scenarioRunnerService.liveUpdate$ .subscribe(response => { this.processLiveUpdates(response.pa
this.scenarioRunnerService.liveUpdate$
.subscribe(response => {
this.processLiveUpdates(response.payload);
})
服务代码为
StompClientKeeper.getInstance().get()
.subscribe('/topic/abcd',
(response: Response) => broadcast the new message);
如何更改此设置以不冻结客户端?如果您想在某些消息太快到达时忽略它们,则操作员可能就是您要查找的:
import { auditTime } from "rxjs/operators";
this.scenarioRunnerService.liveUpdate$.pipe(
auditTime(400)
).subscribe(response => {
this.processLiveUpdates(response.payload);
});
如果在指定的持续时间内收到多条消息,auditTime
操作员将忽略除最后收到的消息以外的所有消息
或者,您可以使用操作员。它的行为不同之处在于,它将传递第一条接收到的消息,并限制在指定持续时间内接收到的后续消息
操作员是另一种可能性。它又不同了,因为它会在指定的时间段对接收到的消息进行采样
选择哪种运算符取决于您想要的行为。答案取决于您是否想要有损解决方案。是否要忽略某些消息?我可以忽略其中任何消息以及
subscribe
提示,这可能涉及RxJS。是吗?不跟随你的评论,只是寻找一种避免应用程序锁定的方法是代码段中的subscribe
调用,因为liveUpdate$
是可以观察到的RxJS吗?这个问题没有标记为rxjs
。我将尝试sampleTime,我认为它最适合我的情况。非常感谢。