Red de conocimientos turísticos - Conocimientos sobre calendario chino - Qué puertos se utilizan para conectarse a través de Java RMI

Qué puertos se utilizan para conectarse a través de Java RMI

Ventajas de RMI

Este mecanismo aporta una gran comodidad al diseño y programación del sistema de informática distribuida. Siempre que el programa esté diseñado de acuerdo con las reglas de RMI, no hay necesidad de preocuparse por los detalles de la red en RMI, como: TCP y Socket, etc. La comunicación entre dos computadoras cualesquiera es enteramente responsable de RMI. Llamar a objetos en la computadora remota es tan fácil como a objetos locales. ?

1. Orientado a objetos: ?

RMI puede pasar objetos completos como parámetros y valores de retorno, no solo tipos de datos predefinidos. En otras palabras, los tipos complejos, como las tablas Java Hash, se pueden pasar como parámetro.

2. Atributos móviles:?

RMI puede mover atributos del cliente al servidor, o del servidor al cliente.

3. Método de diseño:?

La función de paso de objetos le permite aprovechar al máximo las potentes funciones de la tecnología orientada a objetos en la informática distribuida, como las de dos y tres niveles. -Sistemas de estructura por niveles. Si los usuarios pueden pasar propiedades, pueden utilizar el diseño orientado a objetos en sus soluciones. Todos los métodos de diseño orientado a objetos dependen de diferentes atributos para funcionar. Si no puede pasar el objeto completo, incluida la implementación y el tipo, perderá las ventajas que proporciona el método de diseño.

4. Seguridad:?

RMI utiliza el mecanismo de seguridad integrado de Java para garantizar la seguridad del sistema del usuario al descargar y ejecutar programas. RMI utiliza un programa de gestión de seguridad diseñado específicamente para proteger los sistemas de subprogramas maliciosos.

5. ¿Fácil de escribir y usar?

RMI hace que sea fácil y sencillo escribir programas de servicio remoto Java y programas cliente Java que accedan a estos programas de servicio. La interfaz remota es en realidad una interfaz Java. Para implementar las funciones de RMI, se debe crear un objeto remoto. Cualquier objeto que pueda llamarse de forma remota debe implementar la interfaz remota. Pero la interfaz remota en sí no contiene ningún método. Por lo tanto, es necesario crear una nueva interfaz para ampliar la interfaz remota. La nueva interfaz contendrá todos los métodos que se pueden llamar de forma remota. El objeto remoto debe implementar esta nueva interfaz. Dado que la nueva interfaz extiende la interfaz remota, la implementación de la nueva interfaz satisface los requisitos del objeto remoto para implementar la interfaz remota. Cada objeto implementado será referenciado como un objeto remoto. ?

Un PPT externo también resumió:?

Ventajas de Java RMI:?

¿Soporte completo de objetos?

¿Capacidades multiplataforma?

¿Comunicaciones robustas?

¿Objetos de gran tamaño?

¿Seguridad para cliente y servidores?

Distribución/actualizaciones de códigos

Desventajas de RMI

Del proceso anterior, RMI depende mucho de la dirección IP y el puerto del servidor. Sin embargo, durante el desarrollo, no sabemos cuál será la IP y el puerto del servidor en el futuro. Pero el programa cliente depende de esta IP y puerto. Esta es también una de las limitaciones de RMI. Hay dos formas de resolver este problema: una es resolverlo a través de DNS y la otra es exponer la IP fuera del código del programa mediante encapsulación.

La segunda limitación de RMI es que RMI es una llamada remota en lenguaje Java. El lenguaje de programación en ambos extremos debe implementarse en Java. Para la comunicación entre diferentes lenguajes, puede considerar utilizar un servicio web o un objeto común. Solicitar Sistema de Agencia (CORBA) para lograrlo.

?

Un PPT extranjero también concluyó:?

Desventajas de Java RMI:?

¿Java RMI solo admite Java?

Protocolo propietario de ¿Proveedor único?

¿Requiere búsqueda RMI?

Requiere puerto no estándar

Comparación de RMI y Socket

Comparación técnica de RMI socket La programación de red tiene principalmente los siguientes aspectos:

Primero, RMI está orientado a objetos, pero este último no. ?

En segundo lugar, RMI está vinculado al idioma. Por ejemplo, cuando utiliza la tecnología Java RMI, tanto el cliente como el servidor deben desarrollarse en Java. La programación de red de socket es independiente del lenguaje de desarrollo e incluso independiente de la plataforma. Basado en la programación de la red de sockets, el cliente y el servidor pueden utilizar diferentes lenguajes de desarrollo y diferentes plataformas. ?

En tercer lugar, desde la perspectiva de la pila de protocolos de red, RMI y la programación de la red de sockets se encuentran en diferentes niveles. La programación de red basada en sockets se encuentra sobre el protocolo TCP y RMI define su propio protocolo de aplicación sobre el protocolo TCP. Su capa de transporte utiliza el Protocolo de método remoto de Java (JRMP). Se puede ver que en la pila de protocolos de red, las aplicaciones basadas en RMI ocupan una posición más alta. Esto también determina que, en comparación con la programación de redes de socket, RMI perderá cierta flexibilidad y controlabilidad, pero la ventaja es que aporta más desarrollo de aplicaciones. conciso, conveniente y fácil de usar. Por ejemplo: si está utilizando RMI, no necesita preocuparse por cómo se serializa el mensaje. Solo necesita usar RMI como una llamada a un método local. El precio es: los desarrolladores de aplicaciones no tienen un buen control sobre el mecanismo de serialización de mensajes. ?

En cuarto lugar, esta es la última diferencia, y creo que también es un punto más importante, que es la comparación de rendimiento de los dos métodos, que a menudo determina qué tecnología utilizará para desarrollar su aplicación. ?

El resultado del experimento es: en comparación con el socket basado en TCP, RMI necesita ocupar más ancho de banda de red (sobrecarga de protocolo) para transmitir los mismos datos válidos. De aquí, podemos sacar una conclusión general: RMI se utiliza principalmente para "llamar" a métodos remotos (RMI realmente merece su nombre :)). Su connotación técnica enfatiza "llamar". En base a esto, puedo pensar. de es: informática móvil y control remoto. Cuando su aplicación no necesita transmitir una gran cantidad de datos entre el cliente y el servidor, RMI es una mejor opción. Es simple y fácil de desarrollar. Sin embargo, una vez que su aplicación necesita transferir una gran cantidad de datos entre el cliente y el servidor, en casos extremos, como las aplicaciones FTP, RMI no es adecuado y debemos usar sockets.

PD: La eficiencia de RMI sigue siendo muy alta. Generalmente es más eficiente que Hessian y mucho más eficiente que el servicio web. Por supuesto, es un poco menos eficiente que cosas como sockets y sockets. es de nivel inferior. La implementación específica de RMI todavía depende de la programación de Socket subyacente.

Un sistema RMI simple generalmente se puede dividir en 4 archivos. La creación y función de cada archivo se presentará a continuación

Paso 1: crear una interfaz de objeto remoto

<. p>import java.rmi.Remote;

import java.rmi.RemoteException;

/*

* Esta interfaz hereda de Remote, cada uno de los métodos definidos. debe lanzar un objeto RemoteException

* El método que podemos llamar de forma remota está abierto aquí

*/ interfaz pública IRMI extiende Remote{

public String invoke() throws RemoteException;

} 12345678910

Paso 2: Crear una clase de implementación específica de la interfaz

import java.rmi.RemoteException

import java.rmi.server.UnicastRemoteObject

/*

* Implementación de objetos remotos

* La implementación específica del método público se define aquí

*/ public class IRMIImpl extends UnicastRemoteObject implements IRMI {

protected IRMIImpl() throws RemoteException {

super() // Esta implementación debe Hay un constructor explícito; y se lanza una RemoteException

}

private static final long serialVersionUID = 6131922116577454476L;

public String invoke() throws RemoteException { ?//Este método es público

return "¡hola, mundo!";

}

public String tryInvoke() throws RemoteException{ //Este método no es público si lo deseas. para hacerlo público, defínelo en la interfaz

return "try to remoto me";

}

} 1234567891011121314151617181920212223

Paso 3: Crear servidor RMI

importar java.rmi.Naming;

importar java.rmi.registry.LocateRegistry

importar registro java. Registro;

/*

* La clase de registro de objetos remotos. Esta clase debe ejecutarse en el lado del servidor. Después de la ejecución,

* la máquina. Conviértase en RMI. El cliente del servidor puede acceder al objeto remoto en el servidor a través de la URL correcta

* y ejecutar el método de informes externos

*/ public class RMIServer {

<. p> static int port = 8888;

/*

* Crear un R

objeto egistry.

* LocateRegistry se utiliza para obtener un servicio de nombres o crear un servicio de nombres.

* Llame al método LocateRegistry.createRegistry(puerto int) para crear un servicio de nombres en un puerto específico, por lo que los usuarios ya no necesitan iniciar rmiregistry manualmente

* @return devuelve un objeto de Registro

*/

Registro estático privado createRegistry() {

Registro registro = null;

try {

registry = LocateRegistry.getRegistry(port); // Si el puerto no está registrado, se generará una excepción.

registry .list(); //Obtiene el objeto rmi registrado para el puerto

} catch (excepción final e) {

try {

registry = LocateRegistry. createRegistry(port); //Excepción de captura, registro de puerto

} catch (excepción final ee) {

ee.printStackTrace();

}

}

registro de declaraciones;

}

/**

* Registre el objeto en el servidor rmi

*/

public static void bind() {

Registro registro = ?createRegistry();

try {

IRMIImpl impl = new IRMIImpl();

registry.rebind("mytask", impl); //Esto es vinculante. lo mismo que "mytast" para llamar remotamente a impl

} catch (Exception e) {

e.printStackTrace()

}

<; p>}

public static void main(String[] args) {

prueba {

bind();

} catch (Excepción e) {

e.printStackTrace();

}

}

} 123456789101112131415161718192021222324252627282930313233343536373839404142434445464 748495 05152535455

Lo anterior es una mejor forma de escribir, aunque solo sea para probar, puede escribir directamente en el método main():

ImplementClass ic = new ImplementClass() //Clase de implementación específica

Registro r = LocateRegistry.createRegistry(8888);

r.bind("mytask", ic);

//Naming.rebind("rmi)

://localhost:8888/mytask", ic); puede reemplazar la oración anterior 1234

1. Registrar un puerto 2. Vincular taskName e implementClass al puerto registrado 3. El cliente puede pasar URL y taskName para encontrar implementClass.

Paso 4: Crear cliente RMI

importar java.rmi.Naming

clase pública RMIClient {

/ **

* Llamar a métodos en objetos remotos

* @throws Exception

*/

public static void getRemoteObject() lanza una excepción {

/*Obtener el servicio publicado de forma remota

Devolver una referencia (un código auxiliar) al objeto remoto asociado con el nombre especificado*/

IRMI obj = (IRMI)Naming.lookup("rmi://localhost:" RMIServer.port "/mytask" ?//Nota: obtengalo a través de la interfaz

System.out.println(obj.invoke) ( )); //Método para llamar al servicio remoto

}

public static void main(String[] args) {

prueba {

getRemoteObject();

} catch (Excepción e) {

e.printStackTrace();

}

}

} 123456789101112131415161718192021222324

Ejecute el sistema RMI: inicie el servidor RMI e inicie el cliente.