Bar*_*lom 4 java registry networking rmi rmiregistry
我有一个可以通过RMI连接的服务对象.目前我这样做:
服务器
Registry r = LocateRegistry.createRegistry(1234);
r.bind("server", UnicastRemoteObject.exportObject(remoteServer, 0));
Run Code Online (Sandbox Code Playgroud)
客户
RemoteServer s = LocateRegistry.getRegistry("example.com", 1234).lookup("server");
Run Code Online (Sandbox Code Playgroud)
服务器上的注册表只有一个用途,用于链接到单个服务器对象.我想我也可以在服务器上这样做:
UnicastRemoteObject.exportObject(remoteServer, 1234);
Run Code Online (Sandbox Code Playgroud)
但那我将如何从客户端连接到服务器对象?
use*_*421 13
RMI注册表用于解决RMI引导程序问题,即只能通过远程方法调用获取远程存根,并且执行远程方法调用需要远程存根.提供的注册表引用LocateRegistry.getRegistry()可以解决此问题(Naming.lookup()如果您使用该API ,则在内部使用).[请注意,此存根不是通过远程方法获得的:它使用您提供的host:port在本地进行合成.如果它们不正确,您将无法找到,直到您使用注册表存根.]
您有多种选择来解决RMI引导程序问题:
使用RMI注册表.
通过JNDI与LDAP提供程序一起使用LDAP服务器.
使用UnicastRemoteObject,序列化导出对象时获取的存根,并使用共享文件,套接字或sneakernet,使存根可供客户端使用.
使用RMI激活; 序列化注册可激活时获得的存根,并将其与客户端应用程序一起分发到文件中的所有客户端.从存根分布的角度来看,这比(3)简单得多,因为存根在应用程序的生命周期内保持不变,而在(3)中,您必须在每次导出时重新分配存根.
你可以看到注册表当然是最简单的选择.请注意,您只需使用它来解决引导程序问题一旦有了存根,您自己的应用程序远程方法就可以返回更多对象:您在注册表中不需要多个远程对象.您可以将其视为远程对象工厂.
| 归档时间: |
|
| 查看次数: |
4342 次 |
| 最近记录: |