Filtro CPL Polarizado ventajas

RPC/RMI con JAVA (Llamadas a Procedimientos Remotos) - Ejemplo Cliente-Servidor

Bienvenidos!

Hola a todos!, en este blog les vengo compartiendo dos programas, la función del primero es atender llamadas del cliente, es decir será nuestro servidor y el otro el cliente.

RPC (Remote Procedure Call - Llamadas a Procedimientos Remotos) se refiere a que el cliente hará llamadas a métodos que estén en el servidor, le enviará la petición y los parámetros que necesita el método para funcionar. El servidor le regresará únicamente los resultados al cliente. Es similar a la arquitectura cliente-servidor.

El ejemplo es sencillo pero esto lo hice así para que se entendiera, en menos de dos semanas les compartiré uno mas avanzado/completo.

Bueno al grano!

Código del Servidor




La librería necesaria se las dejo al final del blog.
 Clase RPC_Servidor


import org.apache.xmlrpc.*;

public class RPC_Servidor {

public static void main (String [] args) {
 try {

      System.out.println("Iniciando el servidor XML-RPC...");
      
      WebServer server = new WebServer(80);
      OperacionMatematica op = new OperacionMatematica();
      server.addHandler("miServidor", op);
      
      server.start();
      
      System.out.println("Inicio exitoso del Servidor, queda en espera de peticiones del cliente...");
             System.out.println("se conecto");
      
    } catch (Exception exception) {
      System.err.println("Server: " + exception);
    }
}
}

Clase OperacionMatematica
public class OperacionMatematica {

 public Integer suma(int n1, int n2) {
     return (n1+n2);
  }
 public Integer resta(int n1, int n2) {
     return (n1-n2);
  }
 public Integer multiplica(int n1, int n2) {
     return (n1*n2);
  }
 public Integer divide(int n1, int n2) {
     return (n1/n2);
  }
        public String saludo(String nombre){
            String hello="Hola mi estimado "+nombre;
            return hello;
        }

}

En esta parte le estamos indicando el servidor el puerto en el cual esperará la petición, es decir, en que puerto va estar a la escucha del cliente.

WebServer server = new WebServer(80);

En esta parte creamos un objeto de tipo OperacionMatematica() en la cual se encuentran los métodos que el cliente tendrá acceso. Esto para decirle al servidor de donde va a obtener los métodos que le servirán al cliente.

OperacionMatematica op = new OperacionMatematica();

En esta parte le indicamos el nombre al servidor con el cual se identificará a el servidor, y le mandamos el objeto antes creado, el cual contiene todos los métodos.


server.addHandler("miServidor", op);

Iniciamos el servidor


server.start();

En la clase OperacionMatematica() tenemos todos los métodos. Le indicamos el tipo de parámetro que le devolverá al cliente, y también le indicamos el tipo de  parámetros  que recibirá del cliente(en este caso devolverá un entero y recibirá dos parámetros enteros )


public Integer suma(int n1, int n2) {
     return (n1+n2);
  }

En este método regresará un String al cliente y recibirá un String del cliente.


public String saludo(String nombre){
            String hello="Hola mi estimado "+nombre;
            return hello;
        }

Con esto ya tenemos preparado nuestro servidor, para cuando el cliente haga una llamada al servidor este le responderá correctamente (claro, sino suceda ningún error de conexión).




Código del Cliente


package rpc_cliente;
import java.util.*;
import org.apache.xmlrpc.*;

public class RPC_Cliente {
 public static void main (String [] args) {
  try {

     XmlRpcClient cliente = new XmlRpcClient("http://localhost:80/"); 
     Vector text = new Vector();
     Vector params = new Vector();
     String mensaje = "Ivanovich";
     text.addElement(mensaje);
     params.addElement(new Integer(2));
     params.addElement(new Integer(15));
     System.out.println("El cliente se conecto al servidor : "+cliente.getURL());
     
     Object result = cliente.execute("miServidor.saludo", text);
     
     String res=((String)result).toString();
     System.out.println("Mensaje del servidor :"+res);
     
     Object r = cliente.execute("miServidor.resta", params);

     int resta = ((Integer) r).intValue();
     System.out.println("La resta es: "+ resta);
     

   } catch (Exception exception) {
     System.err.println("JavaClient: " + exception);
   }
  }
}


En esta parte estamos creando los objetos.

//Le indicamos la dirección en donde se encuentra el servidor, y el puerto
XmlRpcClient cliente = new XmlRpcClient("http://localhost:80/"); 
     //Creamos un vestor de tipo cadena para almacenar en él los parámetros que se enviaran al servidor( se tiene que enviar en vector, NO variable). 
     Vector text = new Vector();
     //Declaramos un vector de tipo entero.
     Vector params = new Vector();
     //Creamos una variable con un mensaje, que se le enviará al servidor
     String mensaje = "Ivanovich";

Agregamos los parámetros a los vectores

     //Le agrego al vector de tipo texto el mensaje
     text.addElement(mensaje);
     //Le agrego los elementos a los vectores de tipo entero, los cuales se van a sumar, restar o lo que se requiera.
     params.addElement(new Integer(2));
     params.addElement(new Integer(15));

Ejecuto la llamada al servidor (String).

    //Declaramos la variable result de tipo Objeto y la igualamos al cliente.execute() en el cual le mandamos como parámetros el nombre del método(procedimiento) al cual desea tener acceso. miServidor es el nombre del servidor y después del punto indica el nombre del procedimiento o del método. Y el segundo es el parámetro que se le enviará al servidor, que en este caso es "Ivanovich".
    Object result = cliente.execute("miServidor.saludo", text);
     //En esta linea estamos recibiendo la respuesta del servidor y la guardamos en la cadena res, tiene que ser del tipo que el servidor no esta regresando.
     String res=((String)result).toString();
     // Y simplemente la imprimimos
     System.out.println("Mensaje del servidor :"+res);

Ahora llamamos al procedimiento resta(), es similar al anterior, solo que envía y recibe enteros.

//Realizamos la llamada al procedimiento resta, y le enviamos los parámetros
Object r = cliente.execute("miServidor.resta", params);
     //recibe la respuesta (en este caso el resultado de restas 2 - 15)
     int resta = ((Integer) r).intValue();
     System.out.println("La resta es: "+ resta);

Y esto sería prácticamente todo sobre RPC. Claro hay mucho mas, pero este fue sólo un ejemplo para entender como funciona.
 Les dejo una captura:


Como les comentaba al inicio del blog, en menos de dos semanas publicaré otro pero un poco mas complejo.
Espero y me hallan entendido, de lo contrario pueden dejar su comentario en la parte de abajo para que pueda resolverles su duda.
 Les dejo el link de los proyecto completos y de la librearía RPC de Java.

Descargar

Bueno esto es todo, saludos!

Created By Iván Luis Jiménez

Comentarios

  1. Brother una pergunta como pruebo el servicio, podrias pasar el comando?

    ResponderBorrar
    Respuestas
    1. Si te refieres a cómo correr el cliente para conectarte al servidor, es el siguiente comando en la terminal ya sea de Linux o de Windows:

      java -jar RPC_cliente.jar

      tienes que estar ubicado en la ruta en donde se encuentra el .jar del cliente. Si no te encuentras en la ruta entonces tienes que incluirla, así;

      java -jar ruta/RPC_cliente.jar

      Borrar
  2. Seria bueno cambiar el numero depuedo de 80=> 8080.. u otro para evitar el error de privilegios

    ResponderBorrar

Publicar un comentario