Les RPC remote procedure call version 1.0 25 avril 2004
plan de l’exposé introduction principe général les RPC sous Un*x un outil pratique : rpcgen autres outils
introduction la communication par sockets consiste souvent à invoquer des commandes à distance difficultés : lourdeur de programmation encodage des données (paramètres, résultats) identification du serveur, du protocole, … énorme “switch” au niveau du serveur non naturel
introduction objectif des RPC : retrouver la sémantique “classique” de l’appel de procédures sans préoccupation de la localisation de la procédure sans préoccupation du traitement des défaillances en étant le plus transparent possible pour le programmeur difficultés modes de pannes indépendants réseau non forcément fiable temps de réponse
principe général Réseau 1 2 3 4 Programme client Talon client Programme serveur Talon serveur 1 2 communication Protocole de communication Protocole de Réseau 3 4
les RPC sous Un*x nombreux systèmes RPC disponibles (mais souvent incompatibles en eux) un standard : Sun RPC (spécifications dans le domaine public) à base de l’implémentation NFS open-source utilise le protocole XDR (eXternal Data Representation) pour le transport des données
Sun RPC fonctionnement du serveur un processus daemon (serveur) attend des connexions il détermine un programme p qui contient une/des procédures (référencées) le programme p décode les paramètres, exécute la procédure demandée et encode le résultat le daemon retourne le résultat
Sun RPC fonctionnement du client le talon (stub) détermine le numéro de programme détermine la version du programme à utiliser détermine le numéro de la procédure à lancer encode les différents paramètres
Sun RPC plusieurs façons de développer des applications réparties en utilisant : utilisant les fonctions de la couche intermédiaire utilisant les fonctions de la couche basse utiliser le compilateur rpcgen
un outil pratique : rpcgen service.x rpcgen service_svc.c service_clnt.c service_server.c service_client.c service_rpc.h service_xdr.c Makefile_service
un outil pratique : rpcgen utilisation rpcgen –a service.x les fichiers Makefile_service, service_xdr.c, service_rpc.h, service_svc.c, service_clnt.c, service_server.c, service_client.c sont générés il ne reste plus qu’à implémenter les procédures dans service_server.c et le programme client (service_client.c)
un outil pratique : rpcgen structure des fichiers .x /* service.x */ [Définition constantes]* [Définition types]* program NOM_DU_PROGRAMME { [version NOM_DE_LA_VERSION { [type_résultat nom_procédure(type_du_paramètre) = numéro_de_la_procédure;]* } = numéro_version;] } = numéro_du_programme;
un outil pratique : rpcgen les constantes const id = valeur; les types struct num_du_type { [type attribut;]* } typedef type nom_du_type; les tableaux et chaînes typedef int vecteur <100>; typedef string chaine <255>;
un outil pratique : rpcgen numéro de programme réservé : de 0x00000000 à 0x1FFFFFFF public : de 0x20000000 à 0x3FFFFFFF semi-public : de 0x40000000 à 0x5FFFFFFF réservé : 0x60000000 à 0xFFFFFFFF
autres outils rpcinfo : permet d’obtenir la liste des services RPC sur la machine rpcinfo –p [machine hôte] : liste des services RPC enregistrés rpcinfo {–u | -t} machine_hôte numéro_prog [numéro_version] : appel de la procédure 0 d’un programme (valeur donnée en décimal !) en utilisant le protocole {udp | tcp}