Java RMI와 RPC의 차이점은 무엇입니까?


163

Java RMI와 RPC의 실제 차이점은 무엇입니까?

RMI가 객체를 사용하는 곳을 읽었습니까?


나는 RMI자바 gRPC에서 .Net 과 같은 것 같아요 ...
Yousha Aleayoub

답변:


137

RPC는 C 기반이며, 구조화 된 프로그래밍 의미론을 가지고있는 반면, RMI는 Java 기반 기술이며 객체 지향적입니다.

RPC를 사용하면 서버로 내 보낸 원격 함수를 호출 할 수 있습니다. RMI에서는 원격 객체에 대한 참조를 보유하고 해당 메소드를 호출 할 수 있으며 많은 JVM 인스턴스간에 분산 될 수있는 더 많은 원격 객체 참조를 전달 및 반환 할 수 있으므로 훨씬 강력합니다. .

RMI는 순수한 클라이언트-서버 아키텍처보다 복잡한 것을 개발해야 할 때 두드러집니다. 네트워크를 통해 개체를 분산시키는 것은 매우 쉽습니다. 개별 클라이언트를 명시 적으로 연결하지 않고도 모든 클라이언트가 통신 할 수 있습니다.


19
이것은 올바르지 않습니다. RPC도 Java 기반입니다. JAX-RPC 1.1은 2.0으로 교체되었으며 JAX-WS로 이름이 변경되었습니다. Java에서는 RPC에 대해 이야기 할 때 SOAP 및 웹 서비스에 대해 이야기합니다. 다음은 JAX-RPC 1.1에서 JAX-WS로 변경하는 것에 대한 IBM 기사입니다. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC 본인이 링크 한 기사에서이 이름이 "JAX-RPC"에서 "JAX-WS"로 변경된 이유는이 사양이 단순히 "RPC"이상을 포함하기 때문에 원래 이름이 정확하지 않았기 때문이라고 지적했습니다. 전통적인 의미에서. 따라서 RPC의 전통적 의미에 대한이 답변은 여전히 ​​옳습니다.
xji

2
예, 제가 의미하는 바는 RPC가 C / Unix 세계 (최소한 가장 일반적인 RPC 구현, ONCRPC)에서 시작되었으며 그 계산 모델을 따라 모델링되었다는 것입니다. 물론 다른 어떤 프로그래밍 언어에서도이를 구현하는 것을 막을 수있는 것은 없습니다
fortran

6
시맨틱이 사용되는 방식에 대한 약간의 의견 차이는 대답을 잘못 (또는 오도하게) 만들지 않습니다. 이것을 읽는 사람은 누구나 "C 기반"이 기본적으로 "프로 시저 지향"을 의미한다는 것을 쉽게 이해할 수 있습니다. Java를 배운 사람은 POP와 OOP의 차이를 알고 있습니다.
Navin Israni 2016 년

nodejs 클라이언트 (예 :)가 서버에서 RMI 호출을 호출 할 수 있습니까? 그런 방법이 있습니까?
Hitesh Bajaj

45

RPC와 RMI의 주요 차이점은 RMI에 개체가 포함 되어 있다는 입니다 . 프록시 함수 를 사용하여 원격으로 프로 시저를 호출하는 대신 프록시 객체 를 사용 합니다 .

기술이 언어에 통합됨에 따라 객체, 참조, 상속, 다형성 및 예외의 악용으로 인해 RMI에는 더 큰 투명성이 있습니다.

RMI는 RPC보다 고급 기능이므로 런타임에 인터페이스를 변경할 수있는 동적 호출 및 추가 추상화 계층을 제공하는 객체 적응 을 허용합니다.


18

1. 접근 :

RMI는 사용자가 객체와 호출해야하는 객체의 방법을 알아야하는 객체 지향 패러다임을 사용합니다.

RPC는 객체를 다루지 않습니다. 오히려 이미 설정된 특정 서브 루틴을 호출합니다.

2. 일 :

RPC를 사용하면 로컬 호출과 매우 유사한 프로 시저 호출을 얻을 수 있습니다. RPC는 호출을 로컬에서 원격 컴퓨터로 전달하는 것과 관련된 복잡성을 처리합니다.

RMI도 똑같은 일을하지만 RMI는 호출되는 객체와 메소드에 대한 참조를 전달합니다.

RMI = RPC + 객체 지향

3. 더 나은 것 :

RMI는 RPC와 비교하여 더 나은 접근 방식이며, 특히 큰 프로그램에서는 문제가 발생했을 때 쉽게 식별 할 수있는보다 명확한 코드를 제공하기 때문에 더 큰 프로그램에서 더 좋습니다.

4. 시스템 예 :

RPC 시스템 : SUN RPC, DCE RPC

RMI 시스템 : Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Simple Object Access Protocol)


내 응용 프로그램에서 JAX-WS를 사용하여 비누 서비스를 노출 / 소비합니다. RPC 유형 메커니즘이라고 부를 수 있습니까? 내 이해에 따라 JAX-WS에서 java reflection API를 사용하여 원격 메소드를 호출하고 있습니다. 따라서 RPC 정의와 일치합니다. 확인 해주세요 !
Gunjan Shah

11

RPC (원격 프로 시저 호출) 는 로컬 또는 원격 컴퓨터에있는 다른 프로세스에서 함수를 호출 할 수있는 프로세스 간 통신입니다.

RMI (Remote Method Invocation) 는 객체 지향 패러다임을 지원하여 Java에서 RPC를 구현하는 API입니다.

  1. RPC 호출은 C 프로 시저 호출과 같습니다. RPC는 RMI가 메소드 매개 변수 / 반환 유형을 Java 오브젝트로 지원하는 기본 데이터 유형을 지원합니다.

  2. RMI는 RPC와 달리 프로그래밍하기 쉽습니다. 일련의 기본 데이터 유형 대신 오브젝트 측면에서 비즈니스 로직을 생각할 수 있습니다.

  3. RPC는 Java로 제한되는 RMI와 달리 언어 중립적입니다

  4. RMI는 RPC보다 약간 느립니다.

C의 RPC 구현에 대한 이 기사 를 살펴보십시오.


6

RMI 또는 원격 메소드 Invokation은 서버에 모두 전송 프록시 객체 (또는 스텁)는 그러나 미묘한 차이가 클라이언트 측 RPC의 발동이다 RPC 또는 클라이언트에서 원격 프로 시저 호출과 매우 유사 기능 프록시 기능을 통해 RMI는 호출 방법 스루를 프록시 기능. RMI는 RPC 의 객체 지향 버전 이므로 약간 우수하다고 간주됩니다 .

에서 여기 .

자세한 내용과 예는 여기를 참조하십시오 .


5
메소드는 자바에서 함수가 호출되는 것이고, 함수는 c / c ++에서 메소드가 호출되는 것입니다. 그래도 차이점은 무엇입니까?
스타 콘

1
차이점은 (인스턴스 메소드의 경우) 호출 객체가 있다는 것입니다. 호출 오브젝트는 코드와 함께 전송되거나 제거 서버에 있어야하지만 로컬 서버에서 참조 할 수있는 방법이 있어야합니다.
Ellen Spertus

특정 프로그래밍 언어가 메소드와 함수를 처리하는 방식을 무시하면서 문학적인 의미는 함수가 값을 반환하는 반면 메소드는 상태를 수정한다는 것입니다.
Dan

RPC는 프록시 기능을 통해 FUNCTIONS를 호출하고 RMI는 프록시 OBJECT를 사용하여 METHODS를 호출합니다. 권리?
Noor Nawaz

클라이언트는 일반적으로 '프록시 객체 (또는 스텁)를 서버에 전송하지 않습니다. 품질이 낮은 인용.
Lorne의 후작

6

RPC와 RMI의 유일한 차이점은 RMI와 관련된 개체가 있다는 것입니다. 프록시 함수를 통해 함수를 호출하는 대신 프록시를 통해 메서드를 호출합니다.


6

RMI와 RPC의 차이점은 다음과 같습니다.

  • 이름으로 RMI 는 원격 메소드 호출을 나타냅니다. 메소드 또는 오브젝트를 호출합니다. 과
  • RPC 함수를 호출합니다.

2
a method와 a 사이의 암시 적으로 강조하지만 명확하지 않은 차이점은 무엇입니까 function? 자바에서는 아무런 기능이 없습니다 ...하지만 OOP에 지금까지 내가 기억하는 한, 그들은 동의어입니다, 그래서이다 invocationcall.

RPC는 프로 시저 / 함수를 호출합니다.
foo

3

RPC 는 C를 기반으로하는 오래된 프로토콜로, 원격 프로 시저를 호출하여 로컬 호출처럼 보이게 할 수 있습니다. RPC 는 해당 원격 호출을 서버로 전달하고 결과를 클라이언트로 가져 오는 복잡성을 처리합니다.

Java RMI 도 같은 일이지만 약간 다르게 달성합니다. 원격 객체에 대한 참조를 사용 합니다. 따라서 호출하는 메소드의 이름과 함께 원격 객체에 대한 참조를 보냅니다. 대규모 프로그램의 경우 코드 및 네트워크를 통한 객체 배포의 경우 여러 클라이언트가 각 연결을 개별적으로 설정하는 대신 서버에서 메서드를 호출 할 수 있습니다.


특히 "RPC"는 어떤 프로토콜입니까? 내 지식으로는 RPC에는 24 가지 프로토콜이 있고 그중 절반은 Java에서 사용할 수 있습니다.
foo

@foo 의심 할 여지없이 그는 Sun-RPC를 언급하지만 모든 RPC는 원격 프로 시저 호출, nO 객체 또는 메소드를 의미하므로 실제로는 관련이 없습니다.
Lorne의 후작
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.