- Obtener vínculo
- X
- Correo electrónico
- Otras apps
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
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/"); VectorEn esta parte estamos creando los objetos.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); } } }
//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). Vectortext = 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
Cliente-Servidor RPC con JAVA
Llamadas a procedimientos remotos con JAVA
RMI JAVA
RPC con JAVA
RPC/RMI con JAVA
RPC/RMI en JAVA
- Obtener vínculo
- X
- Correo electrónico
- Otras apps
Comentarios
te recomendario subirlos a GitHub
ResponderBorrarGracias por la sugerencia, bro. Saludos!
BorrarBrother una pergunta como pruebo el servicio, podrias pasar el comando?
ResponderBorrarSi 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:
Borrarjava -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
Seria bueno cambiar el numero depuedo de 80=> 8080.. u otro para evitar el error de privilegios
ResponderBorrar