繁体   English   中英

Java RMI 连接断开

[英]Java RMI connection broken

我们有一个 java 客户端-服务器 RMI 应用程序。 客户端通过以下方式执行调用:

public interface MyRemoteInterface extends java.rmi.Remote {
    public byte[] action(byte[] b}

public static Remote lookUp(String ip, int port, String alias) {
    return LocateRegistry.getRegistry(ip, port).lookup(alias)
}


 serverImpl = (MyRemoteInterface)lookUp(ip, rmpiport, alias);

 serverImpl.action(requestBytes);
 ..

它是一个经典的 rmi 客户端-服务器应用程序。 当远程服务器接收到请求(调用)时,它会执行一些过程 P,这需要时间 T 然后返回。 问题是,假设我们分别有两个客户端 C1 和 C2,每个客户端都是相同的(相同的操作系统,相同的 Java,没有防火墙,没有防病毒软件等)。 C1和C2的区别在于他们在不同的网络,不同的ISP提供等。例如他们是两个用户从家里连接,使用不同的服务提供商,调制解调器并连接到集中式服务器S。当过程P需要4分钟时,没有问题,两个客户端都收到响应。 但是如果处理时间需要例如 10 分钟,C2 在服务器或客户端没有任何异常都没有收到任何响应。 问题:造成这种差异的原因是什么? 网络架构如何影响 rmi 连接的行为? 我们可以通过设置一些超时参数或jvm-parameters来克服这个问题吗? 我们没有在客户端或服务器上收到任何超时异常。 如果处理时间变长,那么其中一个客户端不会收到任何响应。

如果处理时间变长,那么其中一个客户端不会收到任何响应。

在我们的(企业)网络中,我们有一些有效的政策来关闭长时间不活跃的连接。 所以可能会有差异。 虽然客户端应该得到一个适当的例外。 为了获得更好的答案,您可以收集有关网络级别的更准确信息(例如 tcpdump)

但是如果处理时间需要例如 10 分钟

在远程执行时(不管协议如何),我不太喜欢长时间运行的进程。 主要是为了防止出现您问题中的问题。

您可以使用一些异步处理,例如启动服务器进程然后让客户端检查状态/结果的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM