【问题标题】:Timeouts for multiple clients in JavaJava中多个客户端的超时
【发布时间】:2018-06-08 17:37:02
【问题描述】:

我有一个服务器和多个客户端。一段时间后,客户端向服务器发送一个活动数据包。 (此时,Server 不响应活动数据包)。对于服务器和客户端,该时间段可能会在运行时更改设备并在运行时进行配置。我想在一个或多个客户端未发送活动数据包时生成警报。 (一包或两个一排等)。这种活力用于应用程序的其他部分,因此越快通知越好。我想出了一些想法,但我无法选择一个。

  1. 创建一个任务,检查每个客户端的最后一个活动数据包时间戳与当前时间,并生成一个或多个警报。在应该小于最小客户端周期的某个周期调用此方法。

    实际上这对我来说似乎更好,但是这种方式不必要地检查了一些客户。 (例如:如果客户周期改变 1-5 分钟,任务应该至少每分钟运行一次,所以我检查所有超过 2 分钟周期的客户都是多余的)。此外,如果客户周期的最小值减少,我也应该减少任务周期。

  2. 为每个客户端创建一个任务,并检查最后一个活着的数据包时间戳与当前时间,休眠一个客户端的周期时间。

    这样,如果客户数量非常多,就会有几十个任务。由于他们大部分时间都会睡觉,我仍然怀疑这是否更优雅。

这种情况有什么成语或模式吗?我认为watchdog kind 的实现很好,但是我没有在Java 中看到类似的东西。

【问题讨论】:

    标签: java architecture software-design


    【解决方案1】:

    方法 2 不是很有用,因为为 100 个客户编写 100 个任务是一个模糊的想法。 如果您使用平均客户周期而不是最小值,则可以优化方法 1。

    【讨论】:

      【解决方案2】:

      这取决于您的需求。 如果警报比应有的时间晚(或早)几秒钟生成,这是否很重要? 如果不是,那么也许值得将具有附近心跳间隔的客户端分组,而不是针对单个客户端而是针对一组客户端运行检查?这将允许减少任务数量(100 -> 10)并增加单个任务处理的客户端数量(1 -> 10)。

      【讨论】:

        【解决方案3】:

        第一种方法很好。

        我只能建议您创建一个独立的服务来执行此控制。如果您将此任务设置为服务器中的线程,则它不会那么易于管理。想象一下你的控制线程被破坏、被杀死等,你会怎么注意到?因此,构建一个独立的 OS 服务,另一个 java 程序,定期检查最后存活的时间戳。

        通过这种方式,您可以轻松地修改和重新启动您的服务,并单独查看其日志。根据它的重要性,你甚至可以建立一个“看门狗的看门狗”服务。

        【讨论】:

          猜你喜欢
          • 2010-12-21
          • 2020-11-16
          • 1970-01-01
          • 2019-09-26
          • 2012-10-30
          • 1970-01-01
          • 2017-07-10
          • 2019-05-05
          相关资源
          最近更新 更多