1

我正在阅读一些与 Java RMI 相关的教程(其中之一在这里),我发现自己几乎不了解 RMI 服务器。

我启动了一个 Java Main 程序,然后创建了一个UnicastRemoteObject, 然后将对象绑定到 RMI 注册服务器中(按照教程进行操作)。之后,Java Main 程序在绑定后退出。

UnicastRemoteObjectis的父类RemoteServer,我假设我创建的每个远程对象(也是UnicastRemoteObject)都是一个 Java 进程(JVM),它监听一个匿名端口。

所以如果我有 10 个远程对象,那么我有 10 个端口被占用来服务客户端远程调用?这听起来不对,但我真的找不到实际建立的 RMI 服务器在哪里,以及它将占用多少端口用于远程客户端调用?

谁能详细解释一下这个东西是如何工作的?

4

1 回答 1

2

我启动一个 Java Main 程序,并创建一个 UnicastRemoteObject,然后在 RMI 注册服务器中绑定该对象(按照教程进行操作)。之后,Java Main 程序在绑定后退出。

不,不会的。只要远程对象保持导出状态,它将保持活动状态。

UnicastRemoteObject 的父类是 RemoteServer,我假设我创建的每个远程对象(也是 UnicastRemoteObject)都是一个监听一个匿名端口的 Java 进程(JVM)。

不,它是一个存在于当前 JVM 中的 Java 对象。不是一个单独的过程。

所以如果我有 10 个远程对象,那么我有 10 个端口被占用来服务客户端远程调用?

不,除非您指定端口,否则您将获得系统分配的端口。通常,该端口将在您从此 JVM 导出的所有远程对象之间共享。

这听起来不对

它不是。

但我真的无法找到实际建立的 RMI 服务器在哪里以及它将占用多少端口用于远程客户端调用?

它在 RMI 实现类的深处。

于 2015-05-02T14:57:50.257 回答