Qual é a diferença entre Java RMI e RPC?


163

Qual é a diferença real entre Java RMI e RPC?

Eu li em alguns lugares que o RMI usa objetos?


Eu acho que RMIem Java é algo como gRPCem .Net ...
— Yousha Aleayoub 29/11/19

Respostas:


137

O RPC é baseado em C e, como tal, possui semântica de programação estruturada, por outro lado, o RMI é uma tecnologia baseada em Java e orientada a objetos.

Com o RPC, você pode simplesmente chamar funções remotas exportadas para um servidor; no RMI, você pode ter referências a objetos remotos e chamar seus métodos, além de transmitir e retornar mais referências a objetos remotos que podem ser distribuídos entre muitas instâncias da JVM, por isso é muito mais poderoso .

O RMI se destaca quando surge a necessidade de desenvolver algo mais complexo do que uma arquitetura pura de cliente-servidor. É muito fácil espalhar objetos em uma rede, permitindo que todos os clientes se comuniquem sem ter que estabelecer conexões individuais explicitamente.


19
Isto está incorreto. O RPC também é baseado em Java. O JAX-RPC 1.1 foi substituído pelo 2.0, que foi renomeado como JAX-WS. Em Java, quando você fala sobre RPC, está falando sobre SOAP e serviços da Web. Aqui está um artigo da IBM sobre JAX-RPC 1.1 mudando para JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
— MattC

1
@MattC Acho que o artigo ao qual você apontou apontou que a razão para esse nome mudar de "JAX-RPC" para "JAX-WS" é exatamente que o nome original não era exato, pois essa especificação envolvia mais do que apenas "RPC" no sentido tradicional. Portanto, essa resposta, que fala sobre o que RPC significa tradicionalmente, ainda está correta.
— Xji 11/11/16

2
Sim, o que eu quis dizer é que o RPC se originou no mundo C / Unix (pelo menos a implementação mais comum do RPC, ONCRPC) e, como tal, é modelado após esse modelo de computação; Claro que nada impede de implementá-lo em cima de qualquer outra linguagem de programação
— fortran

6
Uma pequena diferença de opinião sobre como a semântica é usada não faz uma resposta errada (ou enganosa). Quem lê isso pode entender facilmente que "baseado em C" basicamente significa "orientado a procedimentos" - quem aprendeu Java sabe a diferença entre POP e OOP.
— Navin Israni

um cliente nodejs (por exemplo) pode chamar chamadas RMI no servidor? Existe alguma maneira?
— Hitesh Bajaj

45

A principal diferença entre RPC e RMI é que o RMI envolve objetos . Em vez de chamar procedimentos remotamente usando uma função de proxy , usamos um objeto proxy .

Há maior transparência com o RMI, principalmente devido à exploração de objetos, referências, herança, polimorfismo e exceções, à medida que a tecnologia é integrada à linguagem.

O RMI também é mais avançado que o RPC, permitindo a chamada dinâmica , na qual as interfaces podem mudar no tempo de execução, e a adaptação do objeto , que fornece uma camada adicional de abstração.


18

1. Abordagem:

O RMI usa um paradigma orientado a objetos em que o usuário precisa conhecer o objeto e o método do objeto que ele precisa chamar.

O RPC não lida com objetos. Em vez disso, chama sub-rotinas específicas que já estão estabelecidas.

2. Trabalhando:

Com o RPC, você recebe uma chamada de procedimento que se parece muito com uma chamada local. O RPC lida com as complexidades envolvidas na passagem da chamada do local para o computador remoto.

O RMI faz a mesma coisa, mas o RMI transmite uma referência ao objeto e ao método que está sendo chamado.

RMI = RPC + orientação a objeto

3. Melhor:

O RMI é uma abordagem melhor em comparação com o RPC, especialmente em programas maiores, pois fornece um código mais limpo, mais fácil de identificar se algo der errado.

4. Exemplos de sistemas:

Sistemas RPC: SUN RPC, DCE RPC

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


No meu aplicativo, estou usando o JAX-WS para expor / consumir serviços de sabão. Posso chamá-lo de mecanismo do tipo RPC? Pelo meu entendimento, no JAX-WS, estamos invocando o método remoto usando a API de reflexão de java. Portanto, é compatível com a definição de RPC. Por favor confirme !
— Gunjan Shah

11

A Chamada de Procedimento Remoto (RPC) é uma comunicação entre processos que permite chamar uma função em outro processo que reside na máquina local ou remota.

A chamada de método remoto (RMI) é uma API, que implementa RPC em java com suporte a paradigmas orientados a objetos.

  1. Você pode invocar o RPC é como chamar um procedimento C. O RPC suporta tipos de dados primitivos, nos quais o RMI suporta parâmetros / tipos de retorno de método como objetos java.

  2. O RMI é fácil de programar, diferentemente do RPC. Você pode pensar em sua lógica de negócios em termos de objetos, em vez de uma sequência de tipos de dados primitivos.

  3. O RPC é neutro em termos de idioma, diferentemente do RMI, limitado a java

  4. RMI é um pouco mais lento para RPC

Dê uma olhada neste artigo para implementação de RPC em C


6

A RMI ou Remote Method Invokation é muito semelhante à chamada RPC ou Remote Procedure, pois o cliente envia objetos de proxy (ou stubs) ao servidor; no entanto, a sutil diferença é que o RPC do lado do cliente chama FUNCTIONS através da função proxy e o RMI chama METHODS através do função de proxy. O RMI é considerado um pouco superior, pois é uma versão orientada a objeto do RPC.

A partir daqui .

Para mais informações e exemplos, dê uma olhada aqui .


5
método é o que funções são chamadas em java, function é o que o método é chamado em c / c ++. Ainda assim, qual é a diferença?
— starcorn

1
Uma diferença é que (no caso de métodos de instância), existe um objeto de chamada. O objeto de chamada precisa ser enviado (junto com seu código) ou precisa residir no servidor de remoção, mas tem uma maneira de ser referenciado no servidor local.
— Ellen Spertus

Ignorando como linguagens de programação específicas tratam métodos x funções, o significado literário é que as funções retornam um valor, enquanto os métodos modificam o estado.
— Dan

O RPC chama FUNCTIONS através da função de proxy e o RMI chama METHODS usando o proxy OBJECT. Certo?
— Noor Nawaz

O cliente normalmente não 'envia objetos de proxy (ou stubs) para o servidor'. Citação de baixa qualidade.
— Marquês de Lorne

6

A única diferença real entre RPC e RMI é que há objetos envolvidos no RMI: em vez de invocar funções por meio de uma função proxy, invocamos métodos por meio de um proxy.


6

A diferença entre RMI e RPC é que:

  • RMI como o nome indica Chamada de método remoto: chama um método ou um objeto. E
  • RPC chama uma função.

2
Quais são as diferenças que você enfatiza implicitamente, mas não esclarece, entre a methode a function? Em Java não há funções ... mas em OOP, tanto quanto me lembro, são sinônimos, e também são invocatione call.
— mins

O RPC chama um procedimento / função - horizontalmente.
— Foo

3

O RPC é um protocolo antigo baseado em C.Pode invocar um procedimento remoto e parecer uma chamada local.O RPC lida com as complexidades de passar essa chamada remota para o servidor e obter o resultado para o cliente.

O Java RMI também consegue a mesma coisa, mas de maneira um pouco diferente . Ele usa referências a objetos remotos . Então, o que faz é que ele envia uma referência ao objeto remoto junto com o nome do método a ser chamado. É melhor porque resulta em limpeza O código no caso de programas grandes e também a distribuição de objetos pela rede permite que vários clientes invoquem métodos no servidor em vez de estabelecer cada conexão individualmente.


Qual protocolo é "RPC", especificamente? Que eu saiba, existem duas dúzias de protocolos para RPC e metade desses disponíveis para Java.
— foo

@foo Sem dúvida, ele está se referindo ao Sun-RPC, mas todos os RPCs significam Chamada de Procedimento Remoto, sem objetos ou métodos, por isso não é realmente relevante.
— Marquês de Lorne
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.