domingo, 15 de abril de 2012

RPC

RPC
Remote Procedure Call


Es un híbrido que usa el paso de mensajes y el envío de procedimientos externos o remotos.El tubo por donde viaja el mensaje se llama stub o asistente.

RPC es también un protocolo que permite a un programa de ordenador ejecutar código en otra maquina remota sin tener que preocuparse por las comunicaciones entre ambos.
es una interfaz, pues permite la comunicación entre 2 elementos y se llamara cliente-servidor.

Ejemplo Cliente en Base a RPCs (Stream): dirCliente.c


// Envia comandos al servidor para trabajar con archivos
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <sys/errno.h>
#include <netdb.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <rpc/rpc.h>  // RPCs
#include "dir.h" // estructura de los mensajes
direct *pR;
nReg *pNreg;
arrDatos *misDatos;
int i, cuantos=3;
main(int argc,char *argv[])
{
CLIENT *cl;    /* un handle del cliente */
char *valor;
int key=0;
if(argc>=3) key=atol(argv[2]);
if((key==1 && argc!=4) || ((key==2 || key==3) && argc!=3) 
|| key <=0 || (!isdigit(argv[2][0]))) {
printf("USO: %s nombreServidor Servicio [valorBuscado]\n",argv[0]);
printf("\t\tEJEMPLO: dirCliente neumann 1 Maria\n\t\tSERVICIOS\n");
printf("\t\t1. Acceder por Nombre\n");
printf("\t\t2. Acceder varios Registros\n");
printf("\t\t3. Acceder una Cadena de Longitud Variable\n");
exit(1);
}
/* argv[1]: maquina donde esta el servicio.  DIRPROG: Numero del Programa */
/*  DIRVERS: Version.     tcp: Protocolo     */
if (!(cl=clnt_create(argv[1], DIRPROG, DIRVERS, "tcp"))){
clnt_pcreateerror(argv[1]);  exit(1);
}

switch (key = atol(argv[2])) {
case BUSQ_NOMBRE:
pR = busq_nombre_2(&argv[3],cl);
printf("CLIENTE\nNombre\tapPaterno\tapMaterno\tExtensión\tMensaje\n");
printf("%s\t %s\t\t %s\t\t %d\t\t %s\n", pR->nombre,pR->apPaterno,pR->apMaterno,pR-
>extension,pR->mensaje);
break;
case DAME_CADENA:
cuantos=2;
misDatos= dame_cadena_2(&cuantos,cl);
printf("Caracteres Recibidos= %d\n",misDatos->arrDatos_len);
for (i=0; i < misDatos->arrDatos_len; i++)
printf("%c", misDatos->arrDatos_val[i]);
printf("\n");
break;
case BUSQ_VARIOS:
cuantos=3;
pNreg= busq_varios_2(&cuantos,cl);
if(pNreg==NULL) break;
printf("CLIENTE\nNombre\tapPaterno\tapMaterno\tExtensión\tMensaje\n");
for(i=0, pR=pNreg->regs.regs_val; i<pNreg->regs.regs_len;
i++, pR= pNreg->regs.regs_val+i)
printf("%s\t %s\t\t %s\t\t %d\t\t %s\n", pR->nombre,pR->apPaterno,pR-
>apMaterno,pR->extension,pR->mensaje);
printf(" %s MAS DATOS\n", pNreg->hayMas?"HAY":"NO HAY");
break;
default:
printf("CLIENTE: %s: Servicio Desconocido\n",argv[0]);
   }
}



COMUNICACIÓN GRUPAL


Es una técnica,interfaz,objeto o sistema de comunicación para sistemas distribuidos en una técnica de una a muchas bajo un sistema de ciente.servidor.
Este sistema permite el radiado de mensajes (multicast o broadcast).Se trata de una comunicación de 1 a muchos, en la que los procesos envían un mismo mensaje a un grupo de procesos.

TIPOS:


 1. Envió multicast, el emisor  envía un mensaje a un subconjunto de todos los procesos del grupo.

2. Broadcast, el mensaje se envía a todos los procesos.





http://www.alegsa.com.ar/Dic/rpc.php


No hay comentarios:

Publicar un comentario