2012-05-03 28 views
6

क्या कोई हैलो वर्ल्ड का एक साधारण आरएमआई कॉलबैक उदाहरण दे सकता है? मैं इसे शोध करने की कोशिश कर रहा हूं लेकिन मुझे लगता है कि मैं समझ नहीं पा रहा हूं। मुझे समझ में नहीं आता कि कॉलबैक क्या है/करता है।सरल आरएमआई कॉलबैक उदाहरण

यह मेरे वर्तमान नमस्ते विश्व 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

मैं कोई विशेषज्ञ हूँ आरएमआई में लेकिन मैं बता सकता हूं आप यह है कि आप "डेविड और माइकल रीली" से "जावा नेटवर्क प्रोग्रामिंग और वितरित कंप्यूटिंग" पुस्तक खोज सकते हैं। आप आरएमआई कॉलबैक कार्यान्वयन का एक शानदार उदाहरण प्राप्त कर पाएंगे जो पृष्ठ 278 में शुरू होता है!

लेखक यह समझने के लिए एक अच्छा तरीका है परिभाषित करता है, तो मैं यह बेहतर होगा कॉपी/पेस्ट करने के लिए की तुलना में अपने खुद के बनाने की कोशिश tought, यहाँ यह जाता है: एक कॉलबैक को समझने का

  • "सबसे आसान तरीका एक फोन कॉल के बारे में सोचना है। मान लीजिए कि आप जानना चाहते हैं कि स्टॉक मूल्य एक निश्चित स्तर पर हिट करता है, और आप अपने ब्रोकर से पूछते हैं कि जब यह होता है तो ब्रोकर (घटना का स्रोत) नोटिस करता है कि शेयर मूल्य प्रतिबिंबित करता है आपके पैरामीटर, वह आपको वापस कॉल करता है, आपको नई कीमत के बारे में सूचित करने के लिए। यह एक कॉलबैक है। "

डिफ़ॉल्ट कार्यान्वयन में, आरएमआई सर्वर सर्वर में रिमोट सेवाओं (रिमोट ऑब्जेक्ट्स) के कार्यों का अनुरोध करते हुए, सर्वर से क्लाइंट के बीच संचार की अनुमति देता है। आप अपने क्लाइंट को अपने सर्वर से बात करने के बजाय कॉलबैक विधि का उपयोग कर सकते हैं!

थास्ट का बढ़िया! कल्पना करें कि आपके पास एक सर्वर है जिसे आप जांचना चाहते हैं कि यह ऑनलाइन है (या यदि ड्रॉप/शट डाउन नहीं हुआ) क्लाइंट को खरीदा! आपको रिमोट ऑब्जेक्ट के निरंतर उपयोग का अनुरोध करना होगा जो आपको कुछ बूलियन वैल्यू (उदाहरण के लिए) वापस लेना चाहिए जो वास्तव में ऑनलाइन है।

यह भयानक होगा! चूंकि आप कुछ नेटवर्क बैंडविड्थ खो देंगे, सर्वर को फिर से अनुरोध करें, और फिर, और फिर ... इस पर कुछ कनेक्शन पूलिंग का कारण बनता है!

है कि WY कॉलबैक ;-)

उपयोग करने के लिए उपयोगी हो सकता है, इन मामलों में मुझे आशा है कि आप मेरे जवाब के साथ एक छोटा सा कॉलबैक है क्या के बारे में समझ सकता हूँ/करता है।

सादर,