Qual è la differenza tra Java RMI e RPC?


163

Qual è la differenza effettiva tra Java RMI e RPC?

Ho letto in alcuni punti che RMI utilizza gli oggetti?


Penso che RMIin Java sia qualcosa di simile gRPCa .Net ...
Yousha Aleayoub

Risposte:


137

RPC è basato su C e come tale ha strutturato la semantica di programmazione, dall'altro lato, RMI è una tecnologia basata su Java ed è orientata agli oggetti.

Con RPC puoi semplicemente chiamare le funzioni remote esportate in un server, in RMI puoi avere riferimenti a oggetti remoti e invocare i loro metodi, oltre a passare e restituire più riferimenti a oggetti remoti che possono essere distribuiti tra molte istanze JVM, quindi è molto più potente .

RMI si distingue quando emerge la necessità di sviluppare qualcosa di più complesso di una pura architettura client-server. È molto facile distribuire oggetti su una rete consentendo a tutti i client di comunicare senza dover stabilire esplicitamente connessioni individuali.


19
Questo non è corretto Anche RPC è basato su Java. JAX-RPC 1.1 è stato sostituito da 2.0, che è stato poi ribattezzato JAX-WS. In Java, quando si parla di RPC, si parla di SOAP e servizi Web. Ecco un articolo IBM su JAX-RPC 1.1 che cambia in JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC Penso che l'articolo a cui hai collegato ha sottolineato che la ragione di questo nome cambia da "JAX-RPC" a "JAX-WS" è esattamente che il nome originale non era accurato, poiché questa specifica riguardava più del semplice "RPC" in senso tradizionale. Quindi questa risposta, che parla di ciò che tradizionalmente significa RPC, è ancora corretta.
xji,

2
sì, quello che volevo dire è che RPC è nato nel mondo C / Unix (almeno l'implementazione RPC più comune, ONCRPC) e come tale è modellato su quel modello di calcolo; ovviamente nulla impedisce di implementarlo su qualsiasi altro linguaggio di programmazione
fortran,

6
Una piccola differenza di opinione sul modo in cui viene utilizzata la semantica non fa una risposta errata (o fuorviante). Chiunque legga questo può facilmente capire che "basato su C" significa sostanzialmente "orientato alla procedura" - Chiunque abbia imparato Java conosce la differenza POP rispetto a OOP.
Navin Israni,

un client nodejs (diciamo) può invocare chiamate RMI sul server? Esiste un modo simile?
Hitesh Bajaj,

45

La differenza principale tra RPC e RMI è che RMI coinvolge oggetti . Invece di chiamare le procedure in remoto utilizzando una funzione proxy , utilizziamo invece un oggetto proxy .

Vi è una maggiore trasparenza con l'RMI, in particolare grazie allo sfruttamento di oggetti, riferimenti, eredità, polimorfismo ed eccezioni quando la tecnologia è integrata nel linguaggio.

RMI è anche più avanzato di RPC, consentendo l' invocazione dinamica , in cui le interfacce possono cambiare in fase di esecuzione e l' adattamento degli oggetti , che fornisce un ulteriore livello di astrazione.


18

1. Approccio:

RMI utilizza un paradigma orientato agli oggetti in cui l'utente deve conoscere l'oggetto e il metodo dell'oggetto che deve invocare.

RPC non tratta gli oggetti. Piuttosto, chiama subroutine specifiche già stabilite.

2. Funzionando:

Con RPC, si ottiene una chiamata di procedura che assomiglia molto a una chiamata locale. RPC gestisce le complessità legate al passaggio della chiamata dal computer locale al computer remoto.

RMI fa la stessa cosa, ma RMI passa un riferimento all'oggetto e al metodo che viene chiamato.

RMI = RPC + Orientamento all'oggetto

3. Meglio uno:

RMI è un approccio migliore rispetto a RPC, soprattutto con programmi più grandi in quanto fornisce un codice più pulito che è più facile da identificare se qualcosa va storto.

4. Esempi di sistema:

Sistemi RPC: SUN RPC, DCE RPC

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


Nella mia applicazione, sto usando JAX-WS per esporre / consumare servizi di sapone. Posso chiamarlo meccanismo di tipo RPC? Secondo la mia comprensione, in JAX-WS, stiamo invocando il metodo remoto utilizzando l'API java reflection. Quindi la sua corrispondenza con la definizione di RPC. Per favore, conferma!
Gunjan Shah,

11

Remote Procedure Call (RPC) è una comunicazione tra processi che consente di chiamare una funzione in un altro processo residente in macchina locale o remota.

La chiamata a metodo remoto (RMI) è un'API che implementa RPC in java con il supporto di paradigmi orientati agli oggetti.

  1. Puoi pensare di invocare RPC è come chiamare una procedura C. RPC supporta tipi di dati primitivi in ​​cui come metodo di supporto RMI parametri / tipi restituiti come oggetti java.

  2. RMI è facile da programmare a differenza di RPC. Puoi pensare alla tua logica aziendale in termini di oggetti anziché in una sequenza di tipi di dati primitivi.

  3. RPC è neutro rispetto al linguaggio a differenza di RMI, che è limitato a Java

  4. RMI è un po 'più lento di RPC

Dai un'occhiata a questo articolo per l'implementazione di RPC in C


6

RMI o Remote Method Invokation è molto simile alla chiamata RPC o Remote Procedure in quanto entrambi i client inviano oggetti proxy (o stub) al server, tuttavia la sottile differenza è che RPC lato client invoca FUNZIONI attraverso la funzione proxy e RMI invoca METODI tramite funzione proxy. RMI è considerato leggermente superiore in quanto è una versione orientata agli oggetti di RPC.

Da qui .

Per ulteriori informazioni ed esempi, dai un'occhiata qui .


5
Il metodo è ciò che le funzioni vengono chiamate in Java, la funzione è ciò che il metodo viene chiamato in c / c ++. Quindi qual è la differenza?
Starcorn,

1
Una differenza è che (nel caso dei metodi di istanza), c'è un oggetto che invoca. L'oggetto che richiama deve essere inviato (insieme al suo codice) o deve risiedere sul server di rimozione ma avere un modo per fare riferimento sul server locale.
Ellen Spertus,

Ignorando il modo in cui specifici linguaggi di programmazione trattano metodi rispetto a funzioni, il significato letterario è che le funzioni restituiscono un valore mentre i metodi modificano lo stato.
Dan,

RPC richiama FUNZIONI tramite la funzione proxy e RMI richiama METODI utilizzando il proxy OBJECT. Destra?
Noor Nawaz,

Il client normalmente non "invia oggetti proxy (o stub) al server". Citazioni di scarsa qualità.
Marchese di Lorne il

6

L'unica vera differenza tra RPC e RMI è che ci sono oggetti coinvolti in RMI: invece di invocare funzioni attraverso una funzione proxy, invochiamo metodi attraverso un proxy.


6

La differenza tra RMI e RPC è che:

  • RMI come il nome indica Richiamare metodo remoto: invoca un metodo o un oggetto. E
  • RPC invoca una funzione.

2
Quali sono le differenze che sottintendi implicitamente, ma non chiarisci, tra a method e a function? In Java non ci sono funzioni ... ma in OOP, per quanto posso ricordare, sono sinonimi, e così sono invocatione call.
minuti

RPC invoca una procedura / funzione - flat out.
foo

3

RPC è un vecchio protocollo basato su C. Può invocare una procedura remota e farlo sembrare una chiamata locale. RPC gestisce la complessità di passare quella chiamata remota al server e ottenere il risultato al client.

Anche Java RMI ottiene la stessa cosa ma in modo leggermente diverso. Utilizza riferimenti a oggetti remoti . Quindi, ciò che fa è che invia un riferimento all'oggetto remoto insieme al nome del metodo da invocare. È meglio perché risulta più pulito il codice nel caso di programmi di grandi dimensioni e anche la distribuzione di oggetti sulla rete consente a più client di invocare metodi nel server invece di stabilire ogni connessione individualmente.


Quale protocollo è "RPC", in particolare? Per quanto ne so, ci sono due dozzine di protocolli per RPC e la metà di quelli disponibili per Java.
foo

@foo Senza dubbio si sta riferendo a Sun-RPC, ma tutti gli RPC significano Remote Procedure Call, nessun oggetto o metodo, quindi non è rilevante.
Marchese di Lorne il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.