Java 关于RMI的几个问题:远程方法调用
我正在努力学习RMI,我有一个我从学校学到的RMI的例子。代码分为三部分。有一个接口(HelloIF)、一个服务器(HelloServer)和一个客户端(HelloClient)。在服务器部分,还有一个名为HelloImpl的接口实现 现在,在服务器中,他们将HelloImpl作为一个对象。然后他们把它打回HelloIF并把这个所谓的存根注册到注册表。我问自己,为什么他们首先创建HelloImpl对象,然后将其键入HelloIF接口并在注册表中注册。那么注册表中现在有存根对象了?或者只是引用实际的远程对象(HelloImpl),对吗?同样在RMI中,他们谈到了存根和骨架,但是这个HelloIF存根是存根还是仅仅是一个不吉利的名字 还有人能用简单的英语解释一下RMI是如何更好地工作的吗?服务器是否返回存根对象?或者只是从服务器上的远程对象调用方法的返回值 服务器代码:(最重要) HelloIF接口代码:Java 关于RMI的几个问题:远程方法调用,java,rmi,Java,Rmi,我正在努力学习RMI,我有一个我从学校学到的RMI的例子。代码分为三部分。有一个接口(HelloIF)、一个服务器(HelloServer)和一个客户端(HelloClient)。在服务器部分,还有一个名为HelloImpl的接口实现 现在,在服务器中,他们将HelloImpl作为一个对象。然后他们把它打回HelloIF并把这个所谓的存根注册到注册表。我问自己,为什么他们首先创建HelloImpl对象,然后将其键入HelloIF接口并在注册表中注册。那么注册表中现在有存根对象了?或者只是引用实际
package example.interfaces.hello;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloIF extends Remote {
public static final String servicename = "Hello";
String sayHello() throws RemoteException;
}
客户端代码:(最重要)
他们把它做成了一件物品
对
但是他们把它打回了HelloIF
不对。见下文
并将这个所谓的存根注册到注册表
关于这件事没有所谓的说法。这是一个存根
我在问自己,为什么他们首先创建HelloImpl对象,然后将其类型转换回HelloIF接口并在注册表中注册
他们不会“将其类型转换回HelloIF
界面”。它们通过返回类型为Remote
的UnicastRemoteObject.exportObject()
导出对象,并返回存根,然后将其键入HelloIF
。查一查
那么注册表中现在有存根对象了
对
或者只是引用实际的远程对象(HelloImpl),对吗
不,见上文
同样在RMI中,他们谈到了存根和骨架,但是这个HelloIF存根是存根还是仅仅是一个不吉利的名字
这是存根。你读到的任何关于骷髅的东西都已经严重过时了。1998年引入了一种不同的机制,并在2003年左右成为默认机制
服务器是否返回存根对象
不,这个问题没有意义。注册表通过lookup()
返回存根对象。服务器返回它实现的远程方法返回的任何内容
或者只是从服务器上的远程对象调用方法的返回值
是。请不要发布截图。只需复制粘贴您的代码,作为奖励,它更容易。请看:Refer,它还用示例解释了概念。忘掉这些随意的网络垃圾,看看网页。
package example.interfaces.hello;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface HelloIF extends Remote {
public static final String servicename = "Hello";
String sayHello() throws RemoteException;
}
try {
logger.debug("Locating registry on " + hostname);
Registry registry = LocateRegistry.getRegistry(hostname);
logger.info("Contents of registry: " + Arrays.toString(registry.list()));
HelloIF stub = (HelloIF) registry.lookup(HelloIF.servicename);
logger.info("Found '" + HelloIF.servicename + "' in registry");
logger.trace("Calling sayhello()");
String response = stub.sayHello();
logger.info("Response: " + response);
}