我有一个angular 6应用程序,它通过websocket(更确切地说是sockjs)与服务器进行通信。 我通过服务器启动一个任务,进行REST调用,并且在websocket上收到了大量消息。 我的代码的工作方式非常糟糕。只要有websocket消息传入,它就基本上锁定屏幕。
我当前的代码是组件
this.scenarioRunnerService.liveUpdate$
.subscribe(response => {
this.processLiveUpdates(response.payload);
})
服务代码为
StompClientKeeper.getInstance().get()
.subscribe('/topic/abcd',
(response: Response) => broadcast the new message);
如何更改此设置以不冻结客户端?
答案 0 :(得分:3)
如果您只想忽略某些消息,因为它们到达得太快,您可能正在寻找auditTime
运算符:
file_list = ['tab_team', 'tab_players', 'tab_country']
file_path = ['data', 'docs']
for team in file_list:
for path in file_path:
df = sqlContext.read.load("/user/{}/{}/*.csv".format(path, team), format='com.databricks.spark.csv', header='true', inferSchema='true')
df.registerTempTable("my_temp_table")
sqlContext.sql("create table {}.`{}_{}` stored as ORC as select * from my_temp_table".format(db_name, path, team))
如果在指定的持续时间内收到多条消息,import { auditTime } from "rxjs/operators";
this.scenarioRunnerService.liveUpdate$.pipe(
auditTime(400)
).subscribe(response => {
this.processLiveUpdates(response.payload);
});
操作员将忽略除最后收到的消息以外的所有消息。
或者,您可以使用throttleTime
运算符。它的行为有所不同,它将传递第一个收到的消息,并限制在指定持续时间内收到的后续消息。
还有sampleTime
运算符。再次有所不同,因为它将在指定时间段对接收到的邮件进行采样。
您选择哪种运算符取决于您想要的行为。