java - RMI 服务器在一段时间后终止

标签 java eclipse rmi

我从 Eclipse 运行我的测试 RMI 服务器。 目前,它只包含我的 RMI 接口(interface) (IRDSA) 的实现(带有很少的方法)和服务器本身在这个 main 中实现: (使用私有(private)端口号)

    static Registry registry;
    public static void main(String[] args) {
        // start Registry
        try {
            registry = LocateRegistry.createRegistry(RMI_PORT);
        } catch (ExportException exp) {
            System.out.format ("RMI Registry (Port %d) already active. Providing", RMI_PORT);
            try {
                Registry    existingReg = LocateRegistry.getRegistry(RMI_PORT);
                String[] bound = existingReg.list();
                for (String entry : bound)
                    System.out.println (entry);
            } catch (RemoteException e) {
                e.printStackTrace();
            } 
            return;
        } catch (RemoteException e) {
            e.printStackTrace();
            return;
        }

        try {
            IRDSA server = new RDSAServer();
            IRDSA stub = (IRDSA) UnicastRemoteObject.exportObject(server, 0);

            // Bind the remote object's stub in the registry
            registry.bind(RMI_NAME, stub);

            System.out.println("RDSAServer ready");
        } catch (Exception e) {
            System.err.println("RDSAServer exception: " + e.toString());
            e.printStackTrace();
        }
    }
}

为了进行测试,我启动了一个本地客户端,它很好地执行了这些方法。 可以重复此操作,并且无论 main 已经完成,服务器仍保持 Activity 状态。 但过了一段时间,即使我保持客户端连接(在休息时暂停),当我午餐返回时,客户端仍然处于暂停状态,但服务器会默默终止。

它何时发生,我该如何避免它?

发现一个类似的问题,注册表应该是静态的(就在这里)

我必须保持 main 存活吗?

还有什么吗?

最佳答案

您的服务器应用程序仅包含启动和绑定(bind) RMI 服务器的主方法。仅当存在客户端调用继续进行的 stub 实例时,RMI 服务器才会存在。如果它们被垃圾收集,服务器将被 JVM 关闭。

为了简单起见,您可以在主方法中使用循环,这样主线程就不会结束,并且您的 RMI 服务器将保持 Activity 状态。

关于java - RMI 服务器在一段时间后终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37294703/

相关文章:

java - 从一台服务器串行调用 Java RMI 到另一台服务器

java - 无法获得 SocketPermission 以使用 RMI

java - Android - 内容值覆盖现有行

java - 创建堆栈数组时出错

Bluemix 中的 Java DB Web 启动程序

java - .classpath xml 中的环境变量

python - Eclipse 中的 PyLint,步骤 linting python 运行时

java - 序列化空值的大小

java - 在 Java 中捕获 block 变量警告

java - 执行应用程序时出现问题