RPC (Remote Procedure Call) è un servizio che permette di richiamare una procedura che si trova su un altro computer, in modo trasparente, cioè non è necessario sapere dove si trova la procedura; potrebbe essere sullo stesso computer o su un altro indifferentemente.
Per la comunicazione tra applicazioni che si trovano sullo stesso computer il servizio è chiamato LPC (Local Procedure Call).
RPC si basa sull’idea della programmazione strutturata in cui il programma è composto da un programma principale che richiama delle procedure (che potrebbero anche venire modificate) ed estende il concetto permettendo di collocare le procedure su computer diversi per realizzare applicazioni distribuite.
Il servizio RPC è costruito sopra al livello di trasporto e può usare altri meccanismi di basso livello per la comunicazione, per esempio i socket.
Le procedure che possono essere richiamate da altri computer devono essere descritte da interfacce create tramite un linguaggio chiamato IDL (Interface Description Language), che devono poi essere compilate in modo da essere tradotte nelle istruzioni del linguaggio di programmazione usato per le applicazioni (per esempio il C).
Quando si compilano le interfacce, vengono create delle versioni particolari della procedura remota, chiamate procedure stub (procedure fittizie), che permettono di rendere trasparente la chiamata della procedura remota.
Si tratta di due procedure che devono trovarsi una sul computer che richiama la procedura remota (client stub) e una sul computer su cui si trova la procedura richiamata (server stub), che comunicano tra di loro durante l’esecuzione e permettono di richiamare la vera procedura remota.
La procedura client stub viene richiamata automaticamente dal client quando invoca la procedura remota; la procedura client stub comunica con la procedura server stub che si trova sul server in attesa di richieste; la procedura server stub richiede l’esecuzione effettiva della procedura sul server e restituisce i risultati alla procedura client stub, che a sua volta li passa al modulo chiamante; durante l’esecuzione, tra il client RPC e il server RPC si stabilisce una connessione.
Il passaggio dei parametri usa un meccanismo noto come copia/ripristino che risolve il problema del passaggio dei parametri per riferimento in cui i parametri sono puntatori, cioè indirizzi sul computer locale; al momento della chiamata i puntatori vengono sostituiti dall’area di memoria che indirizzano (copia) e al ritorno i valori restituiti vengono utilizzati per aggiornare l’area (ripristino).
Il client stub per comunicare con il server stub deve conoscerne l’indirizzo; viene utilizzata una soluzione chiamata dynamic binding che utilizza un server di nomi apposito a cui tutti i server, quando vengono avviati, comunicano il loro identificatore e la descrizione (nome e parametri) delle procedure remote a cui offrono l’accesso. I client interrogano il server in base al nome della procedura e ottengono l’indirizzo del server stub e la descrizione completa.