martes, 2 de junio de 2009

RPC


El RPC (del inglés Remote Procedure Call, Llamada a Procedimiento Remoto) es un protocolo que permite a un programa de ordenador ejecutar código en otra máquina remota sin tener que preocuparse por las comunicaciones entre ambos. El protocolo es un gran avance sobre los sockets usados hasta el momento. De esta manera el programador no tenía que estar pendiente de las comunicaciones, estando éstas encapsuladas dentro de las RPC.


Las RPC son muy utilizadas dentro del paradigma cliente-servidor. Siendo el cliente el que inicia el proceso solicitando al servidor que ejecute cierto procedimiento o función y enviando éste de vuelta el resultado de dicha operación al cliente.
Hay distintos tipos de RPC, muchos de ellos estandarizados como pueden ser el RPC de Sun denominado
ONC RPC (RFC 1057), el RPC de OSF denominado DCE/RPC y el Modelo de Objetos de Componentes Distribuidos de Microsoft DCOM, aunque ninguno de estos es compatible entre sí. La mayoría de ellos utilizan un lenguaje de descripción de interfaz (IDL) que define los métodos exportados por el servidor.
Hoy en día se está utilizando el
XML como lenguaje para definir el IDL y el HTTP como protocolo de red, dando lugar a lo que se conoce como servicios web. Ejemplos de éstos pueden ser SOAP o XML-RPC.
ESTÁNDAR RPC
El protocolo RPC y XDR fueron originalmente desarrollados por SUN.
Hoy son ampliamente difundidos mediante una las aplicaciones más importantes conocida como Network File System (NFS). Se considera un estándar de facto.
RPC ha tenido evolución hacia DCE (Distributed Computing Environtment) desarrollado por OSF.
Debido a que el desarrollar en este ambiente implica adicionar a mi programa un conjunto de llamadas de RPC (Remote Procedure Call) y XDR (eXternal Data Representation), se requería mucho conocimiento de este, muchas causas de errores, mucha inversión en tiempo dedicado a problemas de comunicaciones a parte del problema en si a resolver, el mantenimiento de una aplicación tambien es traumatica. Por estas razones se decide crear un PreCompilador de RPC, que nos genera automaticamente el código fijo y relacionado con la parte de comunicaciones. Obviamente un procompilador implica la especificación formal de la utilización de RPC en un programa.
Un precompilador muy popular es el RPCGEN.
RPCGEN utiliza un lenjuaje de especificación de procedimientos conocido como RPCL.
Los archivos de especificación son *.x
Los tipos de definciones que permite hacer RPCL son:
constant
enumeration
structure
union
typedef
program
RPCGEN genera código en C.
FUNCIONAMIENTO DE RPC

En toda maquina que ofrezca servicios en RPC, debe tener un proceso llamado "Portmapper" el cual es responsable de mapear procedimientos a puertos UDP.
El portmapper utiliza en si mismo un puerto bien conocido (111) por el cual cualquier cliente puede contactarlo.
Pasos para llamar un cliente al servidor:
Cuando un servidor (daemon) establece una dirección de escucha de requerimientos, registra los puertos al portmapper, tambien registra los programas RPC y números de versiones, estos números pueden ser arbitrarios.
Antes de que un cliente pueda hacer una llamada remota, se consulta el portmapper del servidor que identifica el número de puerto que por el cual recibe los mensajes RPC.
El cliente y el servidor establecen un canal a través del cual se comunican para ejecutar llamadas a procedimientos remotos.
DESARROLLO DE APLICACIONES EN RPC
#include #include
EN EL SERVIDOR:
Se utilizan dos llamadas:
registerrpc
svc_run
Comunicación por defecto en UDP/IP.
int registerrpc( u_long prognum, u_long versnum, u_long procnum, char *(*procname)(), xdrproc_t inproc, xdrproc_t outproc).
void svc_run()
EN EL CLIENTE:
Se utiliza:
int callrpc(char *host, u_long prognum, u_long versnum, u_long procnum, char *in, xdrproc_t inproc, char *out, xdrproc_t outproc)



No hay comentarios:

Publicar un comentario