我有一个服务器和多个客户端。在某段时间内,客户端向服务器发送一个活动数据包。 (此时,服务器不响应活动数据包)。对于服务器和客户端,该时间段可以将设备更改为设备并在运行时进行配置。我想在一个或多个客户端不发送活动数据包时生成警报。 (一包或两排等)。这种活力用于应用的其他部分,因此通知越快越好。我提出了一些想法,但我无法选择一个。
创建一个任务,使用当前时间检查每个客户端上一个活动数据包时间戳,并生成警报或警报。在某个时间段内调用此方法,该时间段应小于最小客户端时间段。
实际上这对我来说似乎更好,但这种方式不必要地检查一些客户活着。 (例如:如果客户期间改变1-5分钟,任务应该至少每分钟运行一次,所以我检查2分钟以上的所有客户都是多余的)。此外,如果客户期间的最小值减少,我也应该减少任务期限。
为每个客户端创建一个任务,并使用当前时间检查最后一个活动数据包时间戳,为一个客户端的一段时间休眠。
通过这种方式,如果客户数量非常高,将会有数十项任务。由于他们大部分时间都会睡觉,我仍然怀疑这更优雅。
这种情况有成语或模式吗?我认为watchdog
类似的实现套件很好,但我没有在Java
中看到类似的内容。
答案 0 :(得分:0)
方法2不是很有用,因为为100个客户编写100个任务是模糊的想法。 如果使用平均客户端期间而不是最小值,则可以优化方法1。
答案 1 :(得分:0)
这取决于您的需求。 如果在几秒钟之后(或更早)生成警报,它是否至关重要? 如果没有,那么可能值得对附近心跳间隔的客户进行分组并对不是单个客户端而是针对客户端组进行检查?这将允许减少任务数量(100 - > 10)并增加单个任务(1 - > 10)处理的客户端数量。
答案 2 :(得分:0)
第一种方法很好。
我唯一可以建议你的是创建一个独立的服务来进行这种控制。如果将此任务设置为服务器中的线程,则不可管理。想象一下你的控制线程被破坏,被杀等等,你会注意到什么?因此,构建一个独立的OS服务,另一个java程序,定期检查最后的活动时间戳。
通过这种方式,您可以轻松地修改和重新启动服务,并分别查看其日志。根据它的重要性,你甚至可以建立一个“监督看门狗”服务。