Was ist der Unterschied zwischen Java RMI und RPC?


163

Was ist der tatsächliche Unterschied zwischen Java RMI und RPC?

Ich habe an einigen Stellen gelesen, dass RMI Objekte verwendet.


Ich denke RMIin Java ist so etwas wie gRPCin .Net ...
Yousha Aleayoub

Antworten:


137

RPC ist C-basiert und hat als solches eine strukturierte Programmiersemantik. Auf der anderen Seite ist RMI eine Java-basierte Technologie und objektorientiert.

Mit RPC können Sie einfach Remote-Funktionen aufrufen, die in einen Server exportiert wurden. In RMI können Sie Verweise auf Remote-Objekte haben und deren Methoden aufrufen sowie weitere Remote-Objektreferenzen übergeben und zurückgeben, die auf viele JVM-Instanzen verteilt werden können, sodass sie viel leistungsfähiger sind .

RMI fällt auf, wenn die Notwendigkeit besteht, etwas Komplexeres als eine reine Client-Server-Architektur zu entwickeln. Es ist sehr einfach, Objekte über ein Netzwerk zu verteilen, sodass alle Clients kommunizieren können, ohne einzelne Verbindungen explizit herstellen zu müssen.


19
Das ist falsch. RPC basiert ebenfalls auf Java. JAX-RPC 1.1 wurde durch 2.0 ersetzt, das dann in JAX-WS umbenannt wurde. Wenn Sie in Java über RPC sprechen, sprechen Sie über SOAP und Web Services. Hier ist ein IBM Artikel über die Umstellung von JAX-RPC 1.1 auf JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC Ich denke, der Artikel, auf den Sie verlinkt haben, hat darauf hingewiesen, dass der Grund für diese Namensänderung von "JAX-RPC" zu "JAX-WS" genau darin besteht, dass der ursprüngliche Name nicht korrekt war, da diese Spezifikation mehr als nur "RPC" umfasste. im traditionellen Sinne. Diese Antwort, die darüber spricht, was RPC traditionell bedeutet, ist also immer noch richtig.
xji

2
Ja, ich meinte damit, dass RPC aus der C / Unix-Welt stammt (zumindest die häufigste RPC-Implementierung, ONCRPC) und als solche nach diesem Rechenmodell modelliert wird. Natürlich hindert nichts daran, es zusätzlich zu einer anderen Programmiersprache zu implementieren
Uhr

6
Ein kleiner Meinungsunterschied über die Art und Weise, wie Semantik verwendet wird, macht eine Antwort nicht falsch (oder irreführend). Jeder, der dies liest, kann leicht verstehen, dass "C-basiert" im Grunde genommen "prozedurorientiert" bedeutet. Jeder, der Java gelernt hat, kennt den Unterschied zwischen POP und OOP.
Navin Israni

Kann ein NodeJS-Client (sagen wir) RMI-Aufrufe auf dem Server aufrufen? Gibt es einen solchen Weg?
Hitesh Bajaj

45

Der Hauptunterschied zwischen RPC und RMI besteht darin, dass RMI Objekte umfasst . Anstatt Prozeduren mithilfe einer Proxy- Funktion remote aufzurufen , verwenden wir stattdessen ein Proxy- Objekt .

RMI bietet eine größere Transparenz, und zwar aufgrund der Ausnutzung von Objekten, Referenzen, Vererbung, Polymorphismus und Ausnahmen, wenn die Technologie in die Sprache integriert wird.

RMI ist auch weiter fortgeschritten als RPC und ermöglicht einen dynamischen Aufruf , bei dem sich die Schnittstellen zur Laufzeit ändern können, sowie eine Objektanpassung , die eine zusätzliche Abstraktionsebene bietet.


18

1. Ansatz:

RMI verwendet ein objektorientiertes Paradigma, bei dem der Benutzer das Objekt und die Methode des Objekts kennen muss, das er aufrufen muss.

RPC befasst sich nicht mit Objekten. Vielmehr werden bestimmte Subroutinen aufgerufen, die bereits eingerichtet sind.

2. Arbeiten:

Mit RPC erhalten Sie einen Prozeduraufruf, der einem lokalen Aufruf ziemlich ähnlich sieht. RPC behandelt die Komplexität, die mit der Weiterleitung des Anrufs vom lokalen an den Remotecomputer verbunden ist.

RMI macht genau das Gleiche, aber RMI übergibt einen Verweis auf das Objekt und die Methode, die aufgerufen wird.

RMI = RPC + Objektorientierung

3. Besser:

RMI ist ein besserer Ansatz als RPC, insbesondere bei größeren Programmen, da es einen saubereren Code bietet, der leichter zu identifizieren ist, wenn etwas schief geht.

4. Systembeispiele:

RPC-Systeme: SUN RPC, DCE RPC

RMI-Systeme: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Simple Object Access Protocol)


In meiner Anwendung verwende ich JAX-WS, um Seifendienste verfügbar zu machen / zu konsumieren. Kann ich es als RPC-Mechanismus bezeichnen? Nach meinem Verständnis rufen wir in JAX-WS die Remote-Methode mithilfe der Java-Reflection-API auf. Also ist es passend zur Definition von RPC. Bitte bestätigen !
Gunjan Shah

11

Remote Procedure Call (RPC) ist eine prozessübergreifende Kommunikation, mit der eine Funktion in einem anderen Prozess aufgerufen werden kann, der sich auf einem lokalen oder Remote-Computer befindet.

Remote Method Invocation (RMI) ist eine API, die RPC in Java mit Unterstützung objektorientierter Paradigmen implementiert.

  1. Sie können sich vorstellen, RPC aufzurufen, als würden Sie eine C-Prozedur aufrufen. RPC unterstützt primitive Datentypen, wobei RMI Methodenparameter / Rückgabetypen als Java-Objekte unterstützt.

  2. RMI ist im Gegensatz zu RPC einfach zu programmieren. Sie können Ihre Geschäftslogik in Objekten anstatt in einer Folge primitiver Datentypen denken.

  3. RPC ist im Gegensatz zu RMI, das auf Java beschränkt ist, sprachneutral

  4. RMI ist etwas langsamer als RPC

In diesem Artikel finden Sie Informationen zur RPC-Implementierung in C.


6

RMI oder Remote Method Invokation ist dem RPC- oder Remote Procedure-Aufruf sehr ähnlich, da der Client beide Proxy-Objekte (oder Stubs) an den Server sendet. Der subtile Unterschied besteht jedoch darin, dass clientseitige RPC FUNCTIONS über die Proxy-Funktion aufrufen und RMI METHODS über die Proxy-Funktion. RMI wird als etwas überlegen angesehen, da es sich um eine objektorientierte Version von RPC handelt.

Von hier aus .

Weitere Informationen und Beispiele finden Sie hier .


5
Methode ist, was Funktionen in Java aufgerufen werden, Funktion ist, was Methode in c / c ++ aufgerufen wird. Was ist der Unterschied?
Starcorn

1
Ein Unterschied besteht darin, dass (bei Instanzmethoden) ein aufrufendes Objekt vorhanden ist. Das aufrufende Objekt muss entweder gesendet werden (zusammen mit seinem Code) oder auf dem Entfernungsserver leben, aber auf dem lokalen Server referenziert werden können.
Ellen Spertus

Wenn man ignoriert, wie bestimmte Programmiersprachen Methoden und Funktionen behandeln, bedeutet dies literarisch, dass Funktionen einen Wert zurückgeben, während Methoden den Status ändern.
Dan

RPC ruft FUNCTIONS über die Proxy-Funktion auf und RMI ruft METHODS über das Proxy-OBJECT auf. Richtig?
Noor Nawaz

Der Client sendet normalerweise keine Proxy-Objekte (oder Stubs) an den Server. Zitieren von schlechter Qualität.
Marquis von Lorne

6

Der einzige wirkliche Unterschied zwischen RPC und RMI besteht darin, dass RMI Objekte enthält: Anstatt Funktionen über eine Proxy-Funktion aufzurufen, rufen wir Methoden über einen Proxy auf.


6

Der Unterschied zwischen RMI und RPC besteht darin, dass:

  • RMI als Name für Remote Method Invoking: Ruft eine Methode oder ein Objekt auf. Und
  • RPC ruft eine Funktion auf.

2
Was sind die Unterschiede, die Sie implizit hervorheben, aber nicht klarstellen, zwischen a methodund a function? In Java gibt es keine Funktionen ... aber in OOP sind sie, soweit ich mich erinnern kann, Synonyme, und das sind sie auchinvocation und call.
Minuten

RPC ruft eine Prozedur / Funktion auf.
foo

3

RPC ist ein altes Protokoll, das auf C. basiert. Es kann eine Remote-Prozedur aufrufen und sie wie einen lokalen Aufruf aussehen lassen. RPC behandelt die Komplexität, diesen Remote-Aufruf an den Server zu übergeben und das Ergebnis an den Client zu senden.

Java RMI erreicht dasselbe, jedoch etwas anders. Es verwendet Verweise auf entfernte Objekte. Es sendet also einen Verweis auf das entfernte Objekt zusammen mit dem Namen der aufzurufenden Methode. Es ist besser, weil es sauberer führt Durch den Code bei großen Programmen und die Verteilung von Objekten über das Netzwerk können mehrere Clients Methoden auf dem Server aufrufen, anstatt jede Verbindung einzeln herzustellen.


Welches Protokoll ist speziell "RPC"? Meines Wissens gibt es zwei Dutzend Protokolle für RPC und die Hälfte davon für Java.
foo

@foo Zweifellos bezieht er sich auf Sun-RPC, aber alle RPCs bedeuten Remote Procedure Call, keine Objekte oder Methoden, daher ist dies nicht wirklich relevant.
Marquis von Lorne
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.