我认为这是一个已经解决的问题,但我的google-fu还不够好。
我有一张表跟踪多件事情的状态。服务器可以随意将更改推送到客户端。
问题是我不想在最后一次更新少于5秒之前推送更新。
在不创建另一个事件管理器线程的情况下实现此目的的最简洁方法是什么?
我目前的刺伤看起来像这样:
pushEvent(){
Look up the last update time
if: last update less than 5 sec ago
then do nothing
else
pushToClients
}
在大多数情况下,它的效果非常好,但显然最后一次更新可能会被取消。
这样做的好方法是什么? 我想到的一些方法:
谢谢,
答案 0 :(得分:0)
在服务器上,您可以使用包含HashMap
对作为值的{current event, last sent event}
和将事件的接收者(客户端)作为键。然后使用计划的周期性任务,迭代这个地图,检查是否current event != last sent event
,如果是,则将当前事件发送给客户端(并将其放入last sent
)。
一个缺点可能是,如果发送到客户端的速度很慢,则传出队列中可能存在阻塞事件。您可以通过异步发送来解决此问题(例如,通过卸载要发送到单独的Executor中的事件)。