0

我正在开发一个正在改造/现代化的项目,其中有一个小的 RMI 部件,不幸的是我以前从未使用过 RMI。

我无法弄清楚的一件事是为什么在我最初创建 RMI 客户端后它一直调用其自定义 SocketFactory 构造函数。似乎每 5 分钟就会发生一次,即使客户端和服务器之间没有流量,我也会看到调用构造函数的输出。

所以我想一定有某种方法可以结束客户端或以某种方式清理它,所以它停止这样做,但我不知道它可能是什么。

它像这样设置 RMI 连接:

UnicastRemoteObject.exportObject(this);
TheServer rmiServer = (TheServer)Naming.lookup(s); // where s is some rmi:// url

所以我可以访问服务器的方法,它可以调用我的客户端上的方法。

完成连接后,我应该如何清理和停止任何线程以进行持久化?

我正在检查 UnicastRemoteObject,也许我需要使用 unexportObject 方法?

但是这个自定义的 SocketFactory 是如何被调用的,在我的项目中绝对没有引用它的类名,除非它在后台的一些反映是通过从客户端的名称或其他东西派生类名来找到它......

4

1 回答 1

1

您正在看到分布式垃圾收集的效果。如果你完成了存根,只需释放所有本地引用并让它在本地进行垃圾收集。然后 DGC 也将停止,该远程对象的所有网络活动也将停止。

于 2013-01-25T05:56:32.343 回答