Raccomandato, 2024

Scelta Del Redattore

Differenza tra RPC e RMI

RPC e RMI sono i meccanismi che consentono a un client di richiamare la procedura o il metodo dal server stabilendo la comunicazione tra client e server. La differenza comune tra RPC e RMI è che RPC supporta solo la programmazione procedurale mentre RMI supporta la programmazione orientata agli oggetti .

Un'altra importante differenza tra i due è che i parametri passati alla chiamata a procedure remote consistono in ordinarie strutture di dati . D'altra parte, i parametri passati al metodo remoto sono costituiti da oggetti .

Grafico comparativo

Base per il confrontoRPCRMI
supportiProgrammazione procedurale
Programmazione orientata agli oggetti
parametriLe strutture dati ordinarie vengono passate alle procedure remote.Gli oggetti vengono passati a metodi remoti.
EfficienzaInferiore a RMIPiù che RPC e supportato da un moderno approccio di programmazione (cioè paradigmi orientati agli oggetti)
Spese generaliDi Più
Meno in confronto
I parametri in-out sono obbligatori.Non necessariamente
Fornitura di facilità di programmazione
alto
Basso

Definizione di RPC

Remote Procedure Call (RPC) è una funzione di linguaggio di programmazione concepita per l'elaborazione distribuita e basata sulla semantica delle chiamate di procedura locali . È la forma più comune di servizio remoto ed è stato progettato come un modo per astrarre il meccanismo di chiamata della procedura da utilizzare tra i sistemi connessi attraverso una rete. È simile al meccanismo IPC in cui il sistema operativo consente ai processi di gestire dati condivisi e gestire un ambiente in cui diversi processi sono eseguiti su sistemi separati e richiedono necessariamente comunicazioni basate su messaggi.

Capiamo come RPC è implementato attraverso i passaggi indicati:

  • Il processo client chiama lo stub del cliente con parametri e la sua esecuzione viene sospesa fino al completamento della chiamata.
  • I parametri vengono quindi tradotti in forma indipendente dalla macchina mediante il marshalling attraverso lo stub del client. Quindi viene preparato il messaggio che contiene la rappresentazione dei parametri.
  • Per trovare l'identità del sito lo stub del client comunica tra loro con il name server a cui esiste una procedura remota.
  • Utilizzando il protocollo di blocco lo stub del client invia il messaggio al sito in cui esiste la chiamata alla procedura remota. Questo passaggio interrompe lo stub del client fino a quando non ottiene una risposta.
  • Il sito del server riceve il messaggio inviato dal lato client e lo converte in un formato specifico della macchina.
  • Ora lo stub del server esegue una chiamata sulla procedura del server insieme ai parametri e lo stub del server viene interrotto fino al completamento della procedura.
  • La procedura server restituisce i risultati generati allo stub del server e i risultati vengono convertiti in formato indipendente dalla macchina nello stub del server e creano un messaggio contenente i risultati.
  • Il messaggio risultato viene inviato allo stub del client che viene riconvertito in formato macchina specifico adatto allo stub del client.
  • All'ultimo client, lo stub restituisce i risultati al processo client.

Definizione di RMI

Remote Method Invocation (RMI) è simile a RPC ma è specifico per la lingua e una funzionalità di java. Un thread è autorizzato a chiamare il metodo su un oggetto remoto. Per mantenere la trasparenza sul lato client e server, implementa oggetti remoti usando stub e scheletri. Lo stub risiede nel client e per l'oggetto remoto si comporta come un proxy.

Quando un client chiama un metodo remoto, viene chiamato lo stub per il metodo remoto. Lo stub del client è responsabile della creazione e dell'invio del pacco contenente il nome di un metodo e dei parametri marshalling e lo scheletro è responsabile della ricezione del pacco.

I parametri skeleton unmarshals e invoca il metodo desiderato sul server. Lo skeleton effettua il marshalling del valore dato (o delle eccezioni) con il pacchetto e lo invia allo stub del client. Lo stub riassembla il pacco di reso e lo invia al cliente.

In Java, i parametri vengono passati ai metodi e restituiti sotto forma di riferimento. Questo potrebbe essere problematico per il servizio RMI poiché non tutti gli oggetti sono probabilmente metodi remoti. Quindi, deve determinare quale potrebbe essere passato come riferimento e quale non potrebbe.

Java utilizza il processo denominato serializzazione in cui gli oggetti vengono passati come valore. L'oggetto remoto è localizzato in base al valore. Può anche passare un oggetto per riferimento passando un riferimento remoto all'oggetto insieme all'URL della classe stub. Passa per riferimento limita uno stub per l'oggetto remoto.

Differenze chiave tra RPC e RMI

  1. RPC supporta i paradigmi di programmazione procedurale quindi è basato su C, mentre RMI supporta i paradigmi di programmazione orientati agli oggetti ed è basato su Java.
  2. I parametri passati alle procedure remote in RPC sono le normali strutture di dati. Al contrario, RMI transita gli oggetti come parametro per il metodo remoto.
  3. RPC può essere considerato come la versione precedente di RMI e viene utilizzato nei linguaggi di programmazione che supportano la programmazione procedurale e può utilizzare solo il metodo pass by value. Come contro, la struttura RMI è concepita sulla base di un moderno approccio di programmazione, che potrebbe utilizzare il passaggio per valore o riferimento. Un altro vantaggio di RMI è che i parametri passati per riferimento possono essere modificati.
  4. Il protocollo RPC genera più overhead rispetto a RMI.
  5. I parametri passati in RPC devono essere " in-out ", il che significa che il valore passato alla procedura e il valore di output devono avere gli stessi tipi di dati. Al contrario, non vi è alcuna costrizione a passare parametri " dentro-fuori " in RMI.
  6. In RPC, i riferimenti non potrebbero essere probabili perché i due processi hanno lo spazio di indirizzi distinto, ma è possibile in caso di RMI.

Conclusione

Sia RPC che RMI hanno lo stesso scopo ma sono utilizzati in linguaggi che supportano diversi paradigmi di programmazione, quindi hanno caratteristiche distinte.

Top