2012-05-03 36 views
6

有人可以給出一個簡單的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回調 –

回答

11

我不是專家在RMI,但我可以告訴您可以從「David和Michael Reilley」中搜索「Java網絡編程和分佈式計算」一書。您將能夠找到一個從278頁開始的RMI CALLBACK實現的好例子!

筆者定義了一個很好的方式去理解它,所以我因子評分會是更好的複製/粘貼不是試圖使自己的,這裏有雲:理解回調

  • 」最簡單的方法是想要打一個電話,假設你想知道股票價格是否達到一定的水平,並且你要求你的經紀人在它回來時回電,當經紀人(事件的來源)注意到股票價格反映的時候你的參數,他或她給你回電,通知你新的價格,這是一個回調。「

在默認的實現,RMI只允許客戶機之間的通信到服務器,請求在服務器主機遠程服務(遠程對象)的行動。您可以使用回調方法,而不是讓您的服務器與您的客戶端通話!

Thast很棒!想象一下,如果你有一臺服務器,你想檢查它是否在線(或者如果沒有丟棄/關閉),客戶端!你將不得不請求繼續使用一個遠程對象,該對象應該返回一些布爾值(例如),告訴它實際上是在線的。

那太可怕了!因爲你會丟失一些網絡帶寬,再次請求服務器,再次,並再次...造成一些連接池!

這是WY應該是有用的,在這些情況下使用回撥;-)

我希望你能對我的回答有點明白了什麼回調/做。

最好的問候,