简单的RMI回调示例

问题描述:

有人可以给出一个简单的RMI回调Hello World例子吗?我一直在试图研究它,但我似乎找不到一个我明白的东西。我不明白回拨是什么。简单的RMI回调示例

这是我目前的Hello World RMI是否有帮助?

接口

package example.hello; 

import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface Hello extends Remote { 
    String sayHello() throws RemoteException; 
} 

客户

package example.hello; 

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 

public class Client { 

    private Client(){} 

    public static void main(String[] args){ 

     String host = (args.length < 1) ? null : args[0]; 

     try{ 
      Registry registry = LocateRegistry.getRegistry(host); 
      Hello stub = (Hello) registry.lookup("Hello"); 
      String response = stub.sayHello(); 
      System.out.println("response: " + response); 
     } catch (Exception e) { 
      System.err.println("Client exception: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 

} 

服务器

package example.hello; 

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.rmi.server.UnicastRemoteObject; 

public class Server implements Hello { 

    public Server(){} 

    @Override 
    public String sayHello() { 
     System.out.println("responded!"); 
     return "Hello, world!"; 
    } 

    public static void main(String[] args) { 

     try{ 
      Server obj = new Server(); 
      Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); 

      // Bind the remote object's stub in the registry 
      Registry registry = LocateRegistry.getRegistry(); 
      registry.bind("Hello", stub); 

      System.err.println("Server ready"); 
     } catch (Exception e) { 
      System.err.println("Server exception: " + e.toString()); 
      e.printStackTrace(); 
     } 
    } 
} 
+0

或许本文的第4章:HTTP://www.scribd.com/doc/67084961/MasterArbeit会帮助你了解与RMI回调 –

我不是专家在RMI,但我可以告诉您可以从“David和Michael Reilley”中搜索“Java网络编程和分布式计算”一书。您将能够找到一个从278页开始的RMI CALLBACK实现的好例子!

笔者定义了一个很好的方式去理解它,所以我因子评分会是更好的复制/粘贴不是试图使自己的,这里有云:理解回调

  • ”最简单的方法是想要打一个电话,假设你想知道股票价格是否达到一定的水平,并且你要求你的经纪人在它回来时回电,当经纪人(事件的来源)注意到股票价格反映的时候你的参数,他或她给你回电,通知你新的价格,这是一个回调。“

在默认的实现,RMI只允许客户机之间的通信到服务器,请求在服务器主机远程服务(远程对象)的行动。您可以使用回调方法,而不是让您的服务器与您的客户端通话!

Thast很棒!想象一下,如果你有一台服务器,你想检查它是否在线(或者如果没有丢弃/关闭),客户端!你将不得不请求继续使用一个远程对象,该对象应该返回一些布尔值(例如),告诉它实际上是在线的。

那太可怕了!因为你会丢失一些网络带宽,再次请求服务器,再次,并再次...造成一些连接池!

这是WY应该是有用的,在这些情况下使用回拨;-)

我希望你能对我的回答有点明白了什么回调/做。

最好的问候,