Rpc (remote procedure call)

Solo disponible en BuenasTareas
  • Páginas : 7 (1581 palabras )
  • Descarga(s) : 0
  • Publicado : 28 de enero de 2011
Leer documento completo
Vista previa del texto
RPC (Remote Procedure Call)
Concepto de RPC
En unix es posible tener en ejecución un programa en C con varias funciones que pueden ser llamadas desde otro programas. Estos otros programas pueden estar corriendo en otros ordenadores conectados en red.
Supongamos, por ejemplo, que tenemos un ordenador muy potente en cálculo matemático y otro con un buen display para gráficos. Queremos hacer unprograma con mucho cálculo y con unos gráficos "maravillosos". Ninguno de los dos ordenadores cumple con ambos requisitos. Una solución, utilizando RPC (Llamada a procedimientos remotos), consiste en programar las funciones matemáticas en el ordenador de cálculo y publicar dichas funciones. Estas funciones podrán ser llamadas por el ordenador gráfico, pero se ejecutarán en el ordenador decálculo. Por otro lado, hacemos nuestros gráficos en el ordenador gráfico y cuando necesitemos algún cálculo, llamamos a las funciones del ordenador de cálculo.
Al programa con las funciones se le llama "servidor". Al programa que llama a esas funciones se le llama "cliente". Normalmente el servidor está siempre corriendo y a la espera de que algún cliente llame a alguna de sus funciones.. Cuando elcliente llama a una función del servidor, la función se ejecuta en el servidor y el cliente detiene su ejecución hasta que el servidor termina.
En el código del programa servidor básicamente hay que seguir los siguientes pasos:
• Codificar las funciones que van a ser llamadas siguiendo un determinado mecanismo.
• Informar al sistema operativo (unix) de un nombre, una versión y funciones quepublica.
• Meterse en un bucle infinito esperando que alguien llame a alguna de sus funciones.
Mientras que el programa cliente debe:
• Establecer una conexión con el servidor.
• Llamar a las funciones.
• Cerrar la conexión con el servidor.
EL PROGRAMA RPCGEN
Afortunadamente en unix existe una utilidad llamada rpcgen que nos ayuda en todo el proceso de codificación. En un lenguajesimilar a C (pero no igual) definimos los prototipos de las funciones que queremos que se publiquen. Habitualmente dicho fichero suele tener la extensión ".x". Luego, con el comando de unix
rpcgen -a fichero.x
se generan varios ficheros (7 en concreto) con todo el código hecho, excepto, naturalmente, el código de las funciones que queremos publicar.
Si no ponemos la opción -a, se generarán menosficheros, dejándonos a nosotros el trabajo de generar los siguientes. El motivo es que sin la opción -a se generan únicamente los ficheros con las funciones (vacias, para que las rellenemos). Con la opción -a se generan además unos ejemplos de uso, que pueden ser útiles siempre y cuando estemos dispuestos a modificarlos. En el resto del texto suponemos siempre que se ha usado la opción -a.
Elservidor que genera rpcgen tiene todo prácticamente hecho, con la excepción de que nuestras funciones están casi vacias (devuelven un valor por defecto). Tenemos que editar y rellenar el código de nuestras funciones.
El cliente que genera rpcgen tiene también todo hecho. Se conecta al servidor, llama a todas las funciones una por una y cierra la conexión. Obviamente aprovechamos el principio (laconexión) y el final (la desconexión). Las llamadas a las funciones deberíamos borrarlas y hacer que el cliente haga lo que nosostros queramos.
Veamos un pequeño ejemplo de un fichero.x
program NOMBRE_PROGRAMA {
version VERSION_PROGRAMA {
int incrementa (int) = 1;
} = 1;
} = 0x20000001;
El fichero comienza con la palabra "program" y el nombre que queramos dar a nuestroprograma. Después, entre llaves va el resto. Al final todo se iguala a un número (= 0x20000001; ). Este número debe ser único para cada programa. De esta forma podemos tener varios servidores corriendo a la vez en el mismo ordenador y los clientes tendrán una forma de referenciarlos.
Dentro de las llaves del programa va "version" con el nombre de la version y, después de la estructura de...
tracking img