INDIETRO SU AVANTI

Generazione di Client e server col tool RPC

Si supponga di dover consultare un database del personale su una macchina remota, tramite programmi client e server.

Per sviluppare un'applicativo RPC appropriato occorrono due passi:

Il compilatore di protocollo del toolkit RPC si chiama rpcgen ed usa un particolare linguaggio detto RPC Language (RPCL).

Un file di definizione protocollo in RPCL ha estensione .x. Il seguente ne e' un esempio.

File rdb.x


/* direttive del preprocessore */
%#define DATABSE "personnel.dat"  /* il '%' lo fa passare al prepr. */

/* definizioni di costanti */
const MAX_STR = 256;

/* definizioni di strutture */
struct record {
	string firstName;
	string middleInitial;
	string lastName;
	int phone;
	string location;
};

/* definizioni di programma e procedure contenute */
program RDBPROG {
	version RDBVERS {
		record FIRSTNAME_KEY(string) = 1;
		record LASTNAME_KEY(string) = 2;
		record PHONE_KEY(int) = 3;
		record LOCATION_KEY(string) = 4;
		int ADD_RECORD(record) = 5;
	} = 1;  /* numero di versione */
} = 0x20000001;  /* numero identificativo di programma */

Questo file definisce un record di nome record con cinque campi. Il simbolo <MAX_STR> definisce la lunghezza massima di un campo.

Vengono definite quattro procedure di servizio che compiono ricerche per nome e cognome, numero di telefono e locazione. Viene definita anche una procedura di aggiunta record.

La definizione di protocollo viene compilata con il comando seguente:

rpcgen rdb.x

Il risultato e' la generazione di un numero di files:

Occorre ora generare i programmi lato client e lato server per il nostro applicativo. Siano dati:

Compilazione dell'applicativo

Esecuzione dell'applicativo

Sulla macchina server basta lanciarlo in background:

rdb_svc &

Sulla macchina client occorre lanciare il comando client con opportuni parametri, p.es.:

$ rdb flick 2 ROSSI
first   middle   last    phone    location
MARIO   B        ROSSI   213      A112

La sintassi paricolare del nostro comando client e:

rdb <server> <numproc> <parametri>

Ove: