2012-05-03 44 views
6

Ai đó có thể đưa ra một ví dụ gọi lại RMI đơn giản của Hello World? Tôi đã cố gắng để nghiên cứu nó nhưng tôi không thể tìm thấy một trong những mà tôi hiểu. Tôi không hiểu những gì gọi lại là/không.Ví dụ gọi lại RMI đơn giản

Đây là hiện tại Hello World RMI của tôi nếu nó giúp ...

Interface

package example.hello; 

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

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

Khách hàng

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(); 
     } 
    } 

} 

server

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

có lẽ chương 4 của luận án này: http: //www.scribd.com/doc/67084961/MasterArbeit sẽ giúp bạn hiểu các cuộc gọi lại bằng RMI –

Trả lời

11

Tôi không phải chuyên gia trong RMI nhưng tôi có thể nói bạn là bạn có thể tìm kiếm cuốn sách "Lập trình mạng Java và tính toán phân tán" từ "David và Michael Reilley". Bạn sẽ có thể tìm thấy một ví dụ tuyệt vời về việc thực hiện RMI CALLBACK bắt đầu ở trang 278!

Tác giả định nghĩa một cách tốt để hiểu nó, vì vậy tôi tought nó sẽ là tốt hơn để sao chép/dán hơn cố gắng làm cho riêng tôi, ở đây nó đi:

  • "Cách đơn giản nhất để hiểu một callback Hãy suy nghĩ về một cuộc gọi điện thoại Giả sử bạn muốn biết liệu giá cổ phiếu có đạt đến một mức nhất định hay không và bạn yêu cầu nhà môi giới gọi lại khi nó xảy ra. thông số của bạn, họ gọi lại cho bạn, để thông báo cho bạn về mức giá mới. Đó là một cuộc gọi lại. "

Trong triển khai mặc định, RMI chỉ cho phép liên lạc giữa CLIENT với SERVER, yêu cầu các thao tác dịch vụ từ xa (đối tượng từ xa) trong máy chủ lưu trữ. Bạn có thể sử dụng phương thức gọi lại để làm cho Máy chủ của bạn nói chuyện với Khách hàng của bạn!

Tuyệt vời của Thast! Hãy tưởng tượng nếu bạn có MỘT máy chủ mà bạn muốn kiểm tra nếu nó trực tuyến (hoặc nếu không thả/tắt máy) đã mua máy khách! Bạn sẽ phải yêu cầu sử dụng liên tục của một đối tượng từ xa mà sẽ trả lại cho bạn một số giá trị boolean (ví dụ) nói rằng đó là trong thực tế trực tuyến.

Điều đó thật kinh khủng! Bởi vì bạn sẽ mất một số băng thông mạng, yêu cầu máy chủ một lần nữa, và một lần nữa, và một lần nữa ... gây ra một số kết nối tổng hợp vào nó!

Đó là wy nên hữu ích, trong những trường hợp sử dụng CALLBACK ;-)

Tôi hy vọng bạn có thể hiểu với câu trả lời của tôi một chút về những gì gọi là/does.

Trân trọng,

Các vấn đề liên quan