我正在阅读一些与Java RMI相关的教程(其中一个在这里),我发现自己几乎不了解RMI服务器。
我启动一个JavaMain程序,创建一个UnicastRemoteObject
,然后将对象绑定到RMI注册表服务器中(按照教程进行操作)。之后,Java主程序在绑定之后退出。
UnicastRemoteObject
的父类是RemoteServer
,我假设我创建的每个远程对象(也是UnicastRemoteObject
)都是在一个匿名端口上侦听的Java进程(JVM)
那么,如果我有10个远程对象,那么我就有10个端口被占用来为客户端远程调用服务?这听起来不对,但我真的找不到实际建立的RMI服务器在哪里,以及它将占用多少端口用于远程客户端调用?
有人能详细解释一下这是怎么回事吗?
我启动一个Java Main程序,创建一个UnicastRemoteObject,然后将对象绑定到RMI注册表服务器中(按照教程操作)。之后,Java主程序在绑定之后退出。
不,不会。只要远程对象保持导出状态,它就会保持活动状态。
UnicastRemoteObject的父类是RemoteServer,我假设我创建的每个远程对象(也是UnicastRemoteObject)都是在一个匿名端口上侦听的Java进程(JVM)。
否。它是当前JVM中存在的一个Java对象。不是一个单独的过程。
那么,如果我有10个远程对象,那么我就有10个端口被占用来为客户端远程调用服务?
否。除非你指定了一个端口,否则你会得到一个系统分配的端口。通常,这个端口会在你从这个JVM导出的所有远程对象之间共享。
这听起来不对
不是。
但我真的找不到实际建立的RMI服务器在哪里,以及它将占用多少端口用于远程客户端调用?
它深入RMI实现类内部。