Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在不淹没客户端的情况下推送更新事件。干净利落的方法?_Java_Events_Event Handling_Pushviewcontroller_Server Push - Fatal编程技术网

Java 在不淹没客户端的情况下推送更新事件。干净利落的方法?

Java 在不淹没客户端的情况下推送更新事件。干净利落的方法?,java,events,event-handling,pushviewcontroller,server-push,Java,Events,Event Handling,Pushviewcontroller,Server Push,我认为这是一个解决了的问题,但我的谷歌fu不够好 我有一个跟踪多个事物状态的表。服务器可以随意将更改推送到客户端 问题是,如果上次更新时间不到5秒,我不想推送更新 在不使用另一个事件管理器线程的情况下实现这一点的最干净的方法是什么 我当前的刺看起来像这样: pushEvent(){ Look up the last update time if: last update less than 5 sec ago then do nothing else

我认为这是一个解决了的问题,但我的谷歌fu不够好

我有一个跟踪多个事物状态的表。服务器可以随意将更改推送到客户端

问题是,如果上次更新时间不到5秒,我不想推送更新

在不使用另一个事件管理器线程的情况下实现这一点的最干净的方法是什么

我当前的刺看起来像这样:

pushEvent(){
    Look up the last update time
    if: last update less than 5 sec ago
        then do nothing
    else
        pushToClients
}
它在大多数情况下都可以正常工作,但很明显,最后一次更新可能不会被刷新

这样做的好方法是什么? 我想到的一些方法:

给所有推送线程加上5秒延迟,这样我就可以了 检查是否已计划更新。不理想但没有人 我会介意的。 执行推送,然后设置doNotPush=true。使用计时器 将其设置回false。 谢谢,

在服务器上,您可以使用HashMap,它将包含对{current event,last sent event}作为值,事件的recepients clients作为键。然后使用计划的定期任务,该任务将迭代此映射,检查当前事件是否!=上次发送的事件,如果是,将向客户端发送当前事件并将其放入上次发送

一个缺点是,如果发送到客户端的速度很慢,则传出队列中可能会出现事件阻塞。您可以通过异步发送来解决这个问题,例如,通过将要发送的事件卸载到单独的执行器中