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?

Aran
fonte
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.

fortran
fonte
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.

Humphrey Bogart
fonte
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)

Dhaval Simaria
fonte
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

Ravindra babu
fonte
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 .

Kyle Rosendo
fonte
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.

jiby
fonte
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.
irmã
fonte
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.

Ruben Bhattacharya
fonte
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