Java RMI और RPC में क्या अंतर है?


163

जावा आरएमआई और आरपीसी के बीच वास्तविक अंतर क्या है?

मैंने कुछ जगहों पर पढ़ा है कि आरएमआई वस्तुओं का उपयोग करता है?


मुझे लगता RMIहै कि जावा कुछ इस तरह gRPCसे है। नेट ...
यूसुहा अलायब

जवाबों:


137

आरपीसी सी आधारित है, और जैसे कि इसमें संरचित प्रोग्रामिंग शब्दार्थ है, दूसरी तरफ, आरएमआई एक जावा आधारित तकनीक है और यह ऑब्जेक्ट ओरिएंटेड है।

RPC के साथ आप बस सर्वर में एक्सपोर्ट किए गए रिमोट फंक्शन्स को कॉल कर सकते हैं, RMI में आप रिमोट ऑब्जेक्ट्स का संदर्भ ले सकते हैं और उनके तरीकों का आह्वान कर सकते हैं, और कई JVM इंस्टेंसेस के बीच वितरित किए जा सकने वाले अधिक रिमोट ऑब्जेक्ट संदर्भों को भी पास और वापस कर सकते हैं, इसलिए यह बहुत अधिक शक्तिशाली है ।

RMI बाहर खड़ा है जब एक शुद्ध क्लाइंट-सर्वर आर्किटेक्चर की तुलना में कुछ अधिक जटिल विकसित करने की आवश्यकता होती है। स्पष्ट रूप से अलग-अलग कनेक्शन स्थापित करने के बिना सभी क्लाइंट को संचार करने में सक्षम करने वाले नेटवर्क पर वस्तुओं को फैलाना बहुत आसान है।


19
यह गलत है। RPC जावा आधारित है। JAX-RPC 1.1 को 2.0 से बदल दिया गया था, जिसे तब JAX-WS नाम दिया गया था। जावा में, जब आप RPC के बारे में बात करते हैं, तो आप SOAP और वेब सेवाओं के बारे में बात कर रहे हैं। यहाँ JAX-RPC 1.1 के बारे में IBM लेख को JAX-WS में बदल दिया गया है। ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC मुझे लगता है कि आप जिस लेख से जुड़े हैं, वह यह बताता है कि "JAX-RPC" से "JAX-WS" में इस नाम के बदलने का कारण ठीक यही है कि मूल नाम सटीक नहीं था, क्योंकि यह विनिर्देश सिर्फ "RPC" से अधिक शामिल था पारंपरिक अर्थों में। तो यह उत्तर, जो पारंपरिक रूप से RPC का मतलब है के बारे में बात करता है, अभी भी सही है।
xji

2
हाँ, मेरा क्या मतलब है कि RPC की उत्पत्ति C / Unix दुनिया में हुई (कम से कम सबसे आम RPC कार्यान्वयन, ONCRPC) और जैसा कि उस गणना मॉडल के बाद किया गया है; बेशक कुछ भी इसे किसी अन्य प्रोग्रामिंग भाषा के शीर्ष पर लागू करने से रोकता है
फोरट्रान

6
जिस तरह से शब्दार्थ का उपयोग किया जाता है उस पर थोड़ा सा अंतर एक उत्तर को गलत (या भ्रामक) नहीं बनाता है। जो कोई भी इसे पढ़ता है, वह आसानी से समझ सकता है कि "सी आधारित" मूल रूप से "प्रक्रिया उन्मुख" का अर्थ है - जिसने भी जावा सीखा है वह पीओपी बनाम ओओपी अंतर जानता है।
नवीन इसरानी

सर्वर पर एक आरएमआई कॉल आह्वान कर सकते हैं? क्या ऐसा कोई तरीका है?
हितेश बजाज

45

आरपीसी और आरएमआई के बीच मुख्य अंतर यह है कि आरएमआई में ऑब्जेक्ट शामिल होते हैं । प्रॉक्सी फ़ंक्शन के उपयोग से दूरस्थ रूप से कॉलिंग प्रक्रियाओं के बजाय, हम बजाय प्रॉक्सी ऑब्जेक्ट का उपयोग करते हैं ।

RMI के साथ अधिक पारदर्शिता है, अर्थात् वस्तुओं के शोषण, संदर्भ, विरासत, बहुरूपता, और अपवाद के रूप में प्रौद्योगिकी को भाषा में एकीकृत किया गया है।

RMI आरपीसी की तुलना में अधिक उन्नत है, जो गतिशील आह्वान की अनुमति देता है , जहां इंटरफेस रनटाइम में बदल सकता है, और ऑब्जेक्ट अनुकूलन , जो अमूर्त की एक अतिरिक्त परत प्रदान करता है।


18

1. दृष्टिकोण:

आरएमआई एक ऑब्जेक्ट-ओरिएंटेड प्रतिमान का उपयोग करता है जहां उपयोगकर्ता को ऑब्जेक्ट को जानने की आवश्यकता होती है और ऑब्जेक्ट की विधि जिसे उसे आमंत्रित करने की आवश्यकता होती है।

RPC वस्तुओं के साथ सौदा नहीं करता है। बल्कि, यह विशिष्ट उप-थ्रेट्स को बुलाता है जो पहले से ही स्थापित हैं।

2. काम:

RPC के साथ, आपको एक प्रक्रिया कॉल मिलती है जो एक स्थानीय कॉल की तरह बहुत सुंदर लगती है। RPC स्थानीय से दूरस्थ कंप्यूटर पर कॉल पास करने से जुड़ी जटिलताओं को संभालती है।

आरएमआई बहुत ही काम करता है, लेकिन आरएमआई ऑब्जेक्ट और उस विधि को संदर्भित करता है जिसे कहा जा रहा है।

RMI = RPC + ऑब्जेक्ट-ओरिएंटेशन

3. बेहतर एक:

RPC RPC की तुलना में बेहतर दृष्टिकोण है, विशेष रूप से बड़े कार्यक्रमों के साथ क्योंकि यह एक क्लीनर कोड प्रदान करता है जो यह पहचानना आसान है कि क्या कुछ गलत है।

4. सिस्टम उदाहरण:

RPC सिस्टम: SUN RPC, DCE RPC

RMI सिस्टम: जावा RMI, CORBA, Microsoft DCOM / COM +, SOAP (सिंपल ऑब्जेक्ट एक्सेस प्रोटोकॉल)


अपने आवेदन में, मैं साबुन सेवाओं का खुलासा / उपभोग करने के लिए JAX-WS का उपयोग कर रहा हूं। क्या मैं इसे आरपीसी प्रकार तंत्र कह सकता हूं? मेरी समझ के अनुसार, JAX-WS में, हम java प्रतिबिंब API का उपयोग करके दूरस्थ विधि का उपयोग कर रहे हैं। तो इसका मिलान RPC की परिभाषा के साथ है। कृपया पुष्टि करें !
गुंजन शाह

11

रिमोट प्रक्रिया कॉल (RPC) एक अंतर प्रक्रिया संचार है जो स्थानीय या दूरस्थ मशीन में रहने वाली एक अन्य प्रक्रिया में एक फ़ंक्शन को कॉल करने की अनुमति देता है।

दूरस्थ विधि मंगलाचरण (आरएमआई) एक एपीआई है, जो ऑब्जेक्ट ओरिएंटेड प्रतिमानों के समर्थन के साथ जावा में आरपीसी लागू करता है।

  1. आप सोच सकते हैं कि आरपीसी को लागू करना सी प्रक्रिया को कॉल करने जैसा है। RPC आदिम डेटा प्रकारों का समर्थन करती है जहाँ RMI समर्थन विधि पैरामीटर / रिटर्न प्रकार java ऑब्जेक्ट्स के रूप में होता है।

  2. RMI RPC के विपरीत प्रोग्राम करना आसान है। आप आदिम डेटा प्रकारों के अनुक्रम के बजाय वस्तुओं के संदर्भ में अपने व्यापार तर्क को सोच सकते हैं।

  3. RPC RMI के विपरीत भाषा तटस्थ है, जो जावा तक सीमित है

  4. RMI RPC से थोड़ा धीमा है

सी में आरपीसी कार्यान्वयन के लिए इस लेख पर एक नज़र डालें


6

RMI या रिमोट मेथड इनवोकेशन RPC या दूरस्थ प्रक्रिया कॉल के समान है जिसमें क्लाइंट दोनों सर्वर को प्रॉक्सी ऑब्जेक्ट्स (या स्टब्स) भेजता है लेकिन सूक्ष्म अंतर यह है कि क्लाइंट साइड RPC प्रॉक्सी फ़ंक्शन के माध्यम से FUNCTIONS को आमंत्रित करता है और RMI METHODS को प्रॉक्सी के माध्यम से आमंत्रित करता है । प्रॉक्सी फ़ंक्शन। RMI को थोड़ा बेहतर माना जाता है क्योंकि यह RPC का ऑब्जेक्ट-ओरिएंटेड संस्करण है।

से यहाँ

अधिक जानकारी और उदाहरणों के लिए, यहाँ देखें


5
मेथड वह है जिसे जावा में फंक्शन्स कहा जाता है, फंक्शन वह विधि है जिसे c / c ++ में कहा जाता है। तो फिर भी क्या अंतर है?
स्टारकॉर्न

1
एक अंतर यह है कि (उदाहरण के तरीकों के मामले में), एक अदृश्य वस्तु है। इनवोकिंग ऑब्जेक्ट को या तो (इसके कोड के साथ) भेजा जाना चाहिए या उसे हटाने वाले सर्वर पर रहने की आवश्यकता है लेकिन स्थानीय सर्वर पर संदर्भित करने का एक तरीका है।
एलेन स्पार्टस

इस बात की अनदेखी करते हुए कि विशिष्ट प्रोग्रामिंग भाषाएं किस तरह से तरीकों बनाम कार्यों का इलाज करती हैं, साहित्यिक अर्थ यह है कि फ़ंक्शन एक मान लौटाते हैं जबकि विधियां राज्य को संशोधित करती हैं।
दान

RPC प्रॉक्सी फ़ंक्शन के माध्यम से FUNCTIONS को आमंत्रित करती है और RMI प्रॉक्सी OBJECT का उपयोग करके METHODS को आमंत्रित करती है। सही?
नूर नवाज

क्लाइंट सामान्य रूप से 'सर्वर पर प्रॉक्सी ऑब्जेक्ट (या स्टब्स) नहीं भेजता'। गरीब गुणवत्ता प्रशस्ति पत्र।
लोर्ने

6

आरपीसी और आरएमआई के बीच एकमात्र वास्तविक अंतर यह है कि आरएमआई में शामिल वस्तुएं हैं: प्रॉक्सी फ़ंक्शन के माध्यम से फ़ंक्शन को लागू करने के बजाय, हम एक प्रॉक्सी के माध्यम से तरीकों का आह्वान करते हैं।


6

RMI और RPC के बीच अंतर यह है कि:

  • नाम के रूप में RMI रिमोट मेथड इंवाइटिंग को इंगित करता है: यह एक विधि या एक वस्तु को आमंत्रित करता है। तथा
  • RPC यह एक फंक्शन को आमंत्रित करता है।

2
वे अंतर जो आप पर जोर देते हैं, लेकिन एक methodऔर एक के बीच स्पष्ट नहीं करते हैं function? जावा में कोई कार्य नहीं है ... लेकिन ओओपी में जहां तक ​​मुझे याद है, वे समानार्थक हैं, और इसलिए हैं invocationऔर call
मिनट

आरपीसी एक प्रक्रिया / फ़ंक्शन को लागू करता है - फ्लैट आउट।
foo

3

RPC एक पुराना प्रोटोकॉल है जो C.It पर आधारित है। यह एक दूरस्थ प्रक्रिया को लागू कर सकता है और इसे एक स्थानीय कॉल की तरह बना सकता है। RPC उस दूरस्थ मंगलाचरण को सर्वर में पारित करने और क्लाइंट को परिणाम प्राप्त करने की जटिलताओं को संभालता है।

जावा आरएमआई भी एक ही चीज़ को प्राप्त करता है लेकिन थोड़ा अलग तरीके से। यह दूरस्थ वस्तुओं के संदर्भ का उपयोग करता है। तो, यह क्या करता है कि यह दूरस्थ वस्तु का संदर्भ भेजता है, जिसमें आह्वान करने की विधि का नाम है। यह बेहतर है क्योंकि यह क्लीनर में परिणाम करता है। बड़े कार्यक्रमों और नेटवर्क पर वस्तुओं के वितरण के मामले में कोड कई ग्राहकों को व्यक्तिगत रूप से प्रत्येक कनेक्शन स्थापित करने के बजाय सर्वर में तरीकों को लागू करने में सक्षम बनाता है।


विशेष रूप से "आरपीसी" कौन सा प्रोटोकॉल है? मेरी जानकारी के लिए, आरपीसी के लिए दो दर्जन प्रोटोकॉल हैं, और आधे जावा के लिए उपलब्ध हैं।
foo

@ कोई संदेह नहीं कि वह सन-आरपीसी का उल्लेख कर रहा है, लेकिन सभी आरपीसी का मतलब रिमोट प्रोसीजर कॉल, एनओ ऑब्जेक्ट या तरीके हैं, इसलिए यह वास्तव में प्रासंगिक नहीं है।
लोर्ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.