Ejemplo bastante simple de RMI
He aquí un ejemplo bastante simple de RMI (Servidor y Cliente).
Primeramente escribimos la interfaz remota con los métodos requeridos. Por ejemplo, un método para saludar:
A continuación, implementamos esta interfaz en una clase. Para mayor simplicidad, he utilizado una clase anónima. Y ya que estamos en esto, escribimos también el programa Servidor, el cual registrará la instancia generada a partir de la clase anónima:
Por último, escribimos el cliente, el cual accederá al objeto remoto en el servidor.
Una vez que corremos el servidor, este se quedará esperando por peticiones. Y por cada vez que corramos el cliente, éste imprimirá «
».
Para saber más:
- Trail: RMI (The Java™ Tutorials)
- API: java.rmi
- Remote Method Invocation (RMI) de Java, UNAM: [PDF]
- Tema 9. Llamada a métodos remotos (RMI), Departament d'Informàtica - Universitat de València: [PDF]
~~~
- jpaul's blog
- Inicie sesión o regístrese para enviar comentarios
host to host
En mi chamba tenemos dos sistemas que se comunican por RMI. No es lo más eficiente, principalmente porque cada invocación se va por una conexión separada, y hay bastantes invocaciones de un sistema al otro.
Una optimización que hicimos para mejorar tiempos de respuesta, usar menos ancho de banda y sobre todo aligerar recursos (hilos y sockets, principalmente) en la aplicación que recibe las invocaciones, fue ya no usar RMI directamente, sino abrir un socket y manejar un protocolo asíncrono, serializando los objetos que normalmente se pasan por la invocación. Inicialmente pensaba cambiar esto por protocol buffers o algo similar, pero la verdad es que la mejora en el desempeño simplemente usando una sola conexión asíncrona en vez de conexión por invocación fue tan notable que no es necesario al menos por ahora hacer esa segunda mejora, con serializar los objetos directamente (como hace RMI) es suficiente.
Entonces, ¿básicamente lo que
Entonces, ¿básicamente lo que hicieron fue no usar RMI e implementar algo más simple a manita para poder meter un socket asíncrono?
Más simple? no
Pues no es más simple que RMI, porque tienes que manejar la conexión en tu código, pero sí fue bastante más eficiente: en vez de que cada petición via RMI se fuera por su propia conexión, abriendo N sockets entre ambos procesos, se maneja una sola conexión por donde pasan todas las peticiones y respuestas.
Entonces @ezamudio el sistema
Entonces @ezamudio el sistema del que habla es un sistema clientes/servidor?, utilizando RMI claro. Ya que como menciona que RMI hace una nueva conexión por petición. Como hizo para controlar la comunicación por un solo canal?
Si hago preguntas muy simples favor de mencionar y si es posible alguna recomendación de aprendizaje. Gracias y saludos.
pronto
Creo que amerita un post propio, más que ponerlo aquí como respuesta.
Así que aquí está: