【问题标题】:Java RMI: Implement a time out in the client codeJava RMI:在客户端代码中实现超时
【发布时间】:2011-03-14 17:46:16
【问题描述】:

我有一个 Java RMI 系统。这种情况很典型:客户端调用服务器的一个方法。 客户端有一个内部计时器,所以如果服务器没有按时完成(时间在客户端中指定),那么客户端必须执行其他操作。

因此,客户端必须等待服务器完成其工作一段特定的时间,以防服务器没有完成其他操作(不管怎样)。 How can I do this?

我不关心连接超时等等,假设服务器和客户端通过RMI连接并且一切都很好,只是服务器的工作可能是计算密集型的并且可能需要一些时间。

非常感谢!

【问题讨论】:

标签: java timeout rmi


【解决方案1】:

在另一个线程上进行 RMI 调用。让发起线程等待 RMI 调用线程的响应一段时间。

或者,让服务器 RMI 线程将任务委托给工作线程。如果工作线程响应不够快,则返回调用者。

【讨论】:

    【解决方案2】:

    一般来说,当您希望 Java 中的操作超时时,您指的是一两个同步/异步转换层。我从来没有用 RMI 做过这个,但我想你会做类似的事情。也许问这个讨论的参与者:(Asynchronous Java RMI)会很有用。根据 (Spring Async RMI Call) 中提出的观点,我想说您需要执行以下操作:

    1. 使用单独的线程调用 RMI 服务;考虑使用执行器服务。
    2. 用一个调用执行器服务的包装器公开它,并在有限的时间内阻塞结果;考虑使用期货。

    【讨论】:

      【解决方案3】:

      您需要在每个客户端 JVM 上设置名为(我认为)sun.rmi.transport.tcp.responseTimeout 的未记录属性。以毫秒为单位的值。

      【讨论】:

        猜你喜欢
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2017-01-16
        • 2015-04-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多