2) Qual è la struttura dei messaggi di una RPC?

La struttura generale di un messaggio RPC è

enum msg_type {CALL=0,REPLY=1};

struct rpc_msg {

unsigned int xid; /* numero unico di identificazione */

union switch (msg_type mtype) {

case CALL: struct call_body cbody;

case REPLY:struct reply_body rbody;

};

};

In questo esempio quindi, a seconda che il tipo di messaggio sia CALL o REPLY, il corpo del messaggio è del tipo appropriato. In ogni caso nel messaggio è sempre contenuto l’identificativo del messaggio (xid) che consente di appaiare la richiesta e la relativa risposta.

Messaggio di chiamata (CALL). Esso contiene:

identificazione dei messaggi di chiamata e risposta (campo xid)

il corpo del messaggio di chiamata strutturato

struct call_body {

/* versione protocollo RPC*/

unsigned int rpcvers;

/* identificazione unica della procedura remota*/

unsigned int prog; /* Programma */

unsigned int vers; /* Versione */

unsigned int proc; /* Procedura */

/* autenticazione del chiamante e del servitore della chiamata*/

opaque_auth cred;

opaque_auth verf;

/* da qui iniziano gli argomenti effettivi della chiamata RPC */

....argomenti....

};

Messaggio di risposta (REPLY). Esso contiene:

identificazione dei messaggi di chiamata e risposta (campo xid)

il corpo del messaggio di risposta:

enum reply_stat {MSG_ACCEPTED = 0,MSG_DENIED = 1}

union reply_body switch (reply_stat stat)

{case MSG_ACCEPTED:

struct accepted_reply areply;

case MSG_DENIED:

struct rejected_reply rreply; };

Fino al ritorno al programma cliente, il processo cliente è bloccato in attesa della risposta.

Naturalmente, più chiamate RPC possono manifestarsi in parallelo su un nodo servitore .

 


Back
Index
Next