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에 지금까지 내가 기억하는 한, 그들은 동의어입니다, 그래서이다 invocation와 call.
— 분

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.