¿Cuál es la diferencia entre Java RMI y RPC?


163

¿Cuál es la diferencia real entre Java RMI y RPC?

¿He leído en algunos lugares que RMI usa objetos?


Creo que RMIen Java es algo así como gRPCen .Net ...
Yousha Aleayoub

Respuestas:


137

RPC está basado en C y, como tal, tiene una semántica de programación estructurada, por otro lado, RMI es una tecnología basada en Java y está orientada a objetos.

Con RPC puede simplemente llamar a funciones remotas exportadas a un servidor, en RMI puede tener referencias a objetos remotos e invocar sus métodos, y también pasar y devolver más referencias de objetos remotos que se pueden distribuir entre muchas instancias de JVM, por lo que es mucho más poderoso .

RMI se destaca cuando surge la necesidad de desarrollar algo más complejo que una arquitectura cliente-servidor pura. Es muy fácil distribuir objetos en una red permitiendo que todos los clientes se comuniquen sin tener que establecer conexiones individuales explícitamente.


19
Esto es incorrecto. RPC también está basado en Java. JAX-RPC 1.1 fue reemplazado por 2.0, que luego pasó a llamarse JAX-WS. En Java, cuando habla de RPC, está hablando de SOAP y servicios web. Aquí hay un artículo de IBM sobre JAX-RPC 1.1 cambiando a JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC Creo que el artículo al que se vinculó señaló que la razón de este cambio de nombre de "JAX-RPC" a "JAX-WS" es exactamente que el nombre original no era exacto, ya que esta especificación involucraba más que solo "RPC" en un sentido tradicional Entonces, esta respuesta, que habla sobre lo que RPC tradicionalmente significa, sigue siendo correcta.
xji

2
sí, lo que quise decir es que RPC se originó en el mundo C / Unix (al menos la implementación de RPC más común, ONCRPC) y, como tal, se basa en ese modelo de cálculo; por supuesto, nada impide implementarlo sobre cualquier otro lenguaje de programación
fortran

66
Una pequeña diferencia de opinión sobre la forma en que se usa la semántica no hace que una respuesta sea incorrecta (o engañosa). Cualquiera que lea esto puede comprender fácilmente que "basado en C" básicamente significa "orientado al procedimiento". Cualquiera que haya aprendido Java conoce la diferencia entre POP y OOP.
Navin Israni

¿Puede un cliente nodejs (digamos) invocar llamadas RMI en el servidor? ¿Hay tal manera?
Hitesh Bajaj

45

La principal diferencia entre RPC y RMI es que RMI involucra objetos . En lugar de llamar a procedimientos de forma remota mediante el uso de una función proxy , en su lugar utilizamos un objeto proxy .

Hay una mayor transparencia con RMI, es decir, debido a la explotación de objetos, referencias, herencia, polimorfismo y excepciones, ya que la tecnología está integrada en el lenguaje.

RMI también es más avanzado que RPC, lo que permite la invocación dinámica , donde las interfaces pueden cambiar en tiempo de ejecución, y la adaptación de objetos , que proporciona una capa adicional de abstracción.


18

1. Enfoque:

RMI usa un paradigma orientado a objetos donde el usuario necesita conocer el objeto y el método del objeto que necesita invocar.

RPC no trata con objetos. Más bien, llama a subrutinas específicas que ya están establecidas.

2. Trabajo:

Con RPC, obtiene una llamada de procedimiento que se parece bastante a una llamada local. RPC maneja las complejidades involucradas al pasar la llamada de la computadora local a la remota.

RMI hace lo mismo, pero RMI pasa una referencia al objeto y al método al que se llama.

RMI = RPC + Orientación a objetos

3. Mejor uno:

RMI es un mejor enfoque en comparación con RPC, especialmente con programas más grandes, ya que proporciona un código más limpio que es más fácil de identificar si algo sale mal.

4. Ejemplos de sistema:

Sistemas RPC: SUN RPC, DCE RPC

Sistemas RMI: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Protocolo simple de acceso a objetos)


En mi aplicación, estoy usando JAX-WS para exponer / consumir servicios de jabón. ¿Puedo llamarlo mecanismo de tipo RPC? Según tengo entendido, en JAX-WS, estamos invocando un método remoto utilizando la API de reflexión de Java. Por lo tanto, coincide con la definición de RPC. Por favor confirmar !
Gunjan Shah

11

La llamada a procedimiento remoto (RPC) es una comunicación entre procesos que permite llamar a una función en otro proceso que reside en una máquina local o remota.

La invocación de métodos remotos (RMI) es una API que implementa RPC en Java con soporte de paradigmas orientados a objetos.

  1. Puede pensar en invocar RPC es como llamar a un procedimiento C. RPC admite tipos de datos primitivos, mientras que RMI admite parámetros de métodos / tipos de retorno como objetos java.

  2. RMI es fácil de programar a diferencia de RPC. Puede pensar su lógica empresarial en términos de objetos en lugar de una secuencia de tipos de datos primitivos.

  3. RPC es un lenguaje neutral a diferencia de RMI, que se limita a Java

  4. RMI es un poco más lento que RPC

Eche un vistazo a este artículo para la implementación de RPC en C


6

La invocación de método remoto o RMI es muy similar a la llamada a procedimiento remoto o RPC en que el cliente envía objetos proxy (o stubs) al servidor; sin embargo, la sutil diferencia es que RPC del lado del cliente invoca FUNCIONES a través de la función proxy y RMI invoca MÉTODOS a través de función proxy. RMI se considera ligeramente superior, ya que es una versión orientada a objetos de RPC.

A partir de aquí .

Para obtener más información y ejemplos, eche un vistazo aquí .


55
método es lo que se llama funciones en java, función es lo que se llama método en c / c ++. Entonces, ¿cuál es la diferencia?
starcorn

1
Una diferencia es que (en el caso de los métodos de instancia), hay un objeto de invocación. El objeto que invoca debe enviarse (junto con su código) o debe vivir en el servidor de eliminación, pero debe tener una forma de ser referenciado en el servidor local.
Ellen Spertus

Ignorando cómo los lenguajes de programación específicos tratan los métodos frente a las funciones, el significado literario es que las funciones devuelven un valor mientras que los métodos modifican el estado.
Dan

RPC invoca FUNCIONES a través de la función proxy y RMI invoca MÉTODOS usando el OBJETO proxy. ¿Correcto?
Noor Nawaz el

El cliente normalmente no 'envía objetos proxy (o stubs) al servidor'. Cita de mala calidad.
Marqués de Lorne

6

La única diferencia real entre RPC y RMI es que hay objetos involucrados en RMI: en lugar de invocar funciones a través de una función proxy, invocamos métodos a través de un proxy.


6

La diferencia entre RMI y RPC es que:

  • RMI como su nombre indica Invocación de método remoto: invoca un método o un objeto. Y
  • RPC invoca una función.

2
¿Cuáles son las diferencias que enfatiza implícitamente, pero no aclara, entre a methody a function? En Java no hay funciones ... pero en la programación orientada a objetos en la medida de lo que puedo recordar, son sinónimos, y también lo son invocationy call.
minutos

RPC invoca un procedimiento / función: plano.
foo

3

RPC es un protocolo antiguo basado en C. Puede invocar un procedimiento remoto y hacer que parezca una llamada local. RPC maneja las complejidades de pasar esa invocación remota al servidor y obtener el resultado al cliente.

Java RMI también logra lo mismo pero de manera ligeramente diferente. Utiliza referencias a objetos remotos . Entonces, lo que hace es que envía una referencia al objeto remoto junto con el nombre del método a invocar. Es mejor porque resulta más limpio el código en el caso de programas grandes y también la distribución de objetos a través de la red permite que varios clientes invoquen métodos en el servidor en lugar de establecer cada conexión individualmente.


¿Qué protocolo es "RPC", específicamente? Que yo sepa, hay dos docenas de protocolos para RPC, y la mitad de los disponibles para Java.
foo

@foo Sin duda se está refiriendo a Sun-RPC, pero todos los RPC significan Llamada a procedimiento remoto, nO objetos o métodos, por lo que no es realmente relevante.
Marqués de Lorne el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.