Porque usamos sockets

Anuncio
Porque usamos sockets?
En los sockets dos programas establecen conexión y se envían mensajes. Estos mensajes
pueden ser cualquier clase java que implemente la interface Serializable
En rmi un programa (cliente) le pide al otro (servidor) una instancia remota (objeto
remoto) de una clase y luego llama a sus métodos. Los métodos, aunque son llamados
en el código del cliente, se ejecutan en el servidor. Los parámetros que se pasan a los
métodos y el resultado devuelto deben ser clases que implemente Serializable o tipos
primitivos de datos.
Ventajas e inconvenientes

Codificación: El establecimiento de la conexión es similar en número de líneas
de código en ambos casos (un par de líneas).
o Los sockets necesitan más código para identificar qué mensaje llega y
tratarlo en consecuencia (sentencias switch-case o tantos if como tipos
de mensaje distintos). En rmi se hace con llamadas a métodos, por lo que
no es necesario ningún tipo de codificación adicional.
o En rmi se necesitan una serie de herramientas adicionales, compilar los
objetos remotos además de con javac con rmic y finalmente tener
lanzado el programa rmiregistry.
o En los sockets se envía un mensaje y se debe esperar por la respuesta,
que puede llegar o no. Las lecturas de mensajes dejan bloqueado el hilo
hasta que llegan. En rmi la llamada queda bloqueada hasta recibir la
respuesta. En ambos casos suele ser necesario el uso de hilos si las
respuestas pueden tardar.

Ancho de banda: En los sockets, por la red sólo se envían los mensajes que
nosotros enviamos. En rmi, se envía además todo el protocolo interno de rmi,
que suele ser de un tamaño considerable. En general, rmi consume más ancho de
banda de nuestro enlace físico que los sockets.

Comunicación con otros lenguajes: rmi es puramente java, así que sólo puede
integrarse entre dos programas java. Con sockets podemos comunicarnos con
cualquier otro programa hecho en cualquier otro lenguaje, aunque tendremos
que enviar los mensajes campo a campo para hacerlos compatibles con el otro
lenguaje.

Mensajes en broadcast. Los sockets permiten enviar mensajes sin destinatario,
de forma que cualquiera puede recogerlo. Con rmi la comunicación siempre es
punto a punto.

Carga dinámica de clases. Rmi permite la carga dinámica de clases, es decir, el
servidor puede pasar al cliente clases que este no tenga en su CLASSPATH en
tiempo de ejecución y viceversa. Esto hace que ampliar dinámicamente el
comportamiento de una aplicación rmi sea más sencillo.
Cuándo usar sockets y cuándo usar rmi




Si nuestro enlace físico es lento (puerto RS232, modem, etc) es mejor usar
sockets.
Si tenemos pocos tipos de mensajes y se usan para transmitir muchos datos (por
ejemplo, transferencia de ficheros), es mejor sockets.
Si el servidor ofrece muchas funcionalidades, es mejor rmi.
Si la aplicación servidor va a modificarse con cierta frecuencia y no queremos
tener que actualizar todos los clientes uno a uno, la carga dinámica de clases de
rmi puede ser una solución.
Descargar