我正在阅读几个与Java RMI相关的教程(其中一个here),我发现自己很难理解RMI服务器。Java RMI服务器在哪里监听?
我启动一个Java Main程序,然后创建一个UnicastRemoteObject
,然后在RMI注册表服务器中绑定对象(按照教程)。之后,Java Main程序在绑定后退出。
UnicastRemoteObject
的父类是RemoteServer
,我假定我创建的每个远程对象(也是UnicastRemoteObject
)都是监听一个匿名端口的Java进程(JVM)。
那么如果我有10个远程对象,那么我有10个端口被占用来服务客户端远程调用?这听起来不对,但我无法真正找到实际建立的RMI服务器在哪里以及它将占用多少端口以用于远程客户端调用?
任何人都可以详细解释这件事情是如何工作的?
如果需要,可以使用显式端口创建[UnicastRemoteObject](http://docs.oracle.com/javase/8/docs/api/java/rmi/server/UnicastRemoteObject.html)。否则它会随机为你选择一个。除端口外,您还将公开RMI [注册表](http://docs.oracle.com/javase/8/docs/api/java/rmi/registry/Registry.html)端口,默认端口为1099。 –
@EdwinDalorzo是否可以在同一个端口上创建我的所有'RemoteObject'?所以我不需要为每个'RemoteOjbect'使用这么多端口? – GMsoF
嗯,我不完全是RMI的专家,但我认为每个UnicastRemote对象都会打开一个套接字,所以我怀疑你可以为不同的对象重用相同的端口。但我想你可以试着证明我的理论。 –