代码之家  ›  专栏  ›  技术社区  ›  reza

如何限制服务器事件?

  •  1
  • reza  · 技术社区  · 6 年前

    我有一个Angular6应用程序,它通过WebSocket(更准确地说是SockJS)与服务器通信。 我用服务器rest call启动一个任务,然后在websocket上收到大量消息。 我的代码工作方式很糟糕。只要有websocket消息出现,它基本上就会锁定屏幕。

    我当前的代码是组件

    this.scenarioRunnerService.liveUpdate$
    .subscribe(response => {
        this.processLiveUpdates(response.payload);
    })
    

    服务代码是

    StompClientKeeper.getInstance().get()
    .subscribe('/topic/abcd',
        (response: Response) => broadcast the new message);
    

    我怎样才能不冻结客户呢?

    1 回复  |  直到 6 年前
        1
  •  3
  •   cartant    6 年前

    如果您想在某些消息到达太快时忽略它们,则 auditTime 接线员很可能是你要找的人:

    import { auditTime } from "rxjs/operators";
    
    this.scenarioRunnerService.liveUpdate$.pipe(
      auditTime(400)
    ).subscribe(response => {
      this.processLiveUpdates(response.payload);
    });
    

    如果在指定的持续时间内收到多条消息, 审核时间 操作员将忽略除最后收到的消息外的所有消息。

    或者,您可以使用 throttleTime 接线员。它的行为不同之处在于,它将传递第一个接收到的消息,并限制在指定持续时间内接收到的后续消息。

    以及 sampleTime 操作员是另一种可能性。它又不同了,因为它会在指定的时间段对接收到的消息进行采样。

    你选择哪个接线员取决于你想要的行为。