Quelle est la différence entre Java RMI et RPC?


163

Quelle est la différence réelle entre Java RMI et RPC?

J'ai lu à certains endroits que RMI utilise des objets?


Je pense RMIqu'en Java, c'est quelque chose comme gRPCdans .Net ...
Yousha Aleayoub

Réponses:


137

RPC est basé sur C, et en tant que tel, il a une sémantique de programmation structurée, de l'autre côté, RMI est une technologie basée sur Java et est orientée objet.

Avec RPC, vous pouvez simplement appeler des fonctions distantes exportées vers un serveur, dans RMI, vous pouvez avoir des références à des objets distants et appeler leurs méthodes, et également transmettre et renvoyer plus de références d'objets distants qui peuvent être distribuées entre de nombreuses instances JVM, donc c'est beaucoup plus puissant .

RMI se démarque lorsque le besoin de développer quelque chose de plus complexe qu'une pure architecture client-serveur se fait sentir. Il est très facile de répartir des objets sur un réseau permettant à tous les clients de communiquer sans avoir à établir explicitement des connexions individuelles.


19
Ceci est une erreur. RPC est également basé sur Java. JAX-RPC 1.1 a été remplacé par 2.0, qui a ensuite été renommé JAX-WS. En Java, lorsque vous parlez de RPC, vous parlez de SOAP et de services Web. Voici un article IBM sur le passage de JAX-RPC 1.1 à JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC Je pense que l'article auquel vous avez lié a souligné que la raison du changement de nom de "JAX-RPC" à "JAX-WS" est précisément que le nom d'origine n'était pas exact, car cette spécification impliquait plus que simplement "RPC" dans un sens traditionnel. Donc, cette réponse, qui parle de ce que signifie traditionnellement RPC, est toujours correcte.
xji

2
oui, ce que je voulais dire, c'est que RPC est originaire du monde C / Unix (au moins l'implémentation RPC la plus courante, ONCRPC) et en tant que tel, il est modélisé d'après ce modèle de calcul; bien sûr rien n'empêche de l'implémenter par-dessus tout autre langage de programmation
fortran

6
Une petite différence d'opinion sur la façon dont la sémantique est utilisée ne fait pas une réponse fausse (ou trompeuse). Quiconque lit ceci peut facilement comprendre que "basé sur C" signifie fondamentalement "orienté procédure" - Quiconque a appris Java connaît la différence POP vs POO.
Navin Israni

un client nodejs peut-il (par exemple) appeler des appels RMI sur le serveur? Existe-t-il un tel moyen?
Hitesh Bajaj

45

La principale différence entre RPC et RMI est que RMI implique des objets . Au lieu d'appeler des procédures à distance en utilisant une fonction proxy , nous utilisons à la place un objet proxy .

Il y a une plus grande transparence avec RMI, notamment en raison de l'exploitation des objets, des références, de l'héritage, du polymorphisme et des exceptions car la technologie est intégrée dans le langage.

RMI est également plus avancé que RPC, permettant un appel dynamique , où les interfaces peuvent changer au moment de l'exécution, et l' adaptation d'objet , qui fournit une couche supplémentaire d'abstraction.


18

1. Approche:

RMI utilise un paradigme orienté objet où l'utilisateur a besoin de connaître l'objet et la méthode de l'objet qu'il doit invoquer.

RPC ne traite pas les objets. Au contraire, il appelle des sous-programmes spécifiques qui sont déjà établis.

2. Travail:

Avec RPC, vous obtenez un appel de procédure qui ressemble à peu près à un appel local. RPC gère les complexités impliquées dans le passage de l'appel de l'ordinateur local à l'ordinateur distant.

RMI fait exactement la même chose, mais RMI transmet une référence à l'objet et à la méthode qui est appelée.

RMI = RPC + Orientation objet

3. Mieux:

RMI est une meilleure approche par rapport à RPC, en particulier avec des programmes plus volumineux car il fournit un code plus propre qui est plus facile à identifier en cas de problème.

4. Exemples de systèmes:

Systèmes RPC: SUN RPC, DCE RPC

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


Dans mon application, j'utilise JAX-WS pour exposer / consommer des services soap. Puis-je l'appeler mécanisme de type RPC? Selon ce que je comprends, dans JAX-WS, nous invoquons une méthode distante à l'aide de l'API de réflexion Java. Donc, sa correspondance avec la définition de RPC. Veuillez confirmer !
Gunjan Shah

11

L'appel de procédure à distance (RPC) est une communication inter-processus qui permet d'appeler une fonction dans un autre processus résidant sur une machine locale ou distante.

L'appel de méthode à distance (RMI) est une API, qui implémente RPC en java avec la prise en charge des paradigmes orientés objet.

  1. Vous pouvez penser que l'invocation de RPC revient à appeler une procédure C. RPC prend en charge les types de données primitifs où comme RMI prennent en charge les paramètres de méthode / les types de retour en tant qu'objets java.

  2. RMI est facile à programmer contrairement à RPC. Vous pouvez penser votre logique métier en termes d'objets au lieu d'une séquence de types de données primitifs.

  3. RPC est indépendant du langage contrairement à RMI, qui est limité à java

  4. RMI est un peu plus lent à RPC

Consultez cet article pour l'implémentation RPC en C


6

RMI ou Remote Method Invokation est très similaire à RPC ou Remote Procedure Call en ce que le client envoie tous deux des objets proxy (ou stubs) au serveur, mais la différence subtile est que le RPC côté client appelle FUNCTIONS via la fonction proxy et RMI appelle METHODS via le fonction proxy. RMI est considéré comme légèrement supérieur car il s'agit d'une version orientée objet de RPC.

D' ici .

Pour plus d'informations et d'exemples, jetez un œil ici .


5
method est ce que les fonctions sont appelées en java, function est quelle méthode est appelée en c / c ++. Alors, quelle est la différence?
starcorn

1
Une différence est que (dans le cas des méthodes d'instance), il y a un objet appelant. L'objet appelant doit être envoyé (avec son code) ou doit vivre sur le serveur de suppression mais avoir un moyen d'être référencé sur le serveur local.
Ellen Spertus

Ignorant la façon dont les langages de programmation spécifiques traitent les méthodes par rapport aux fonctions, la signification littéraire est que les fonctions renvoient une valeur alors que les méthodes modifient l'état.
Dan

RPC appelle FUNCTIONS via la fonction proxy et RMI appelle METHODS en utilisant le proxy OBJECT. Droite?
Noor Nawaz

Le client n'envoie normalement pas «d'objets proxy (ou stubs) au serveur». Citation de mauvaise qualité.
Marquis of Lorne le

6

La seule vraie différence entre RPC et RMI est qu'il y a des objets impliqués dans RMI: au lieu d'appeler des fonctions via une fonction proxy, nous invoquons des méthodes via un proxy.


6

La différence entre RMI et RPC est que:

  • RMI comme son nom l'indique Appel de méthode à distance: il invoque une méthode ou un objet. Et
  • RPC il invoque une fonction.

2
Quelles sont les différences que vous mettez implicitement en évidence, mais ne clarifiez pas, entre a methodet a function? En Java, il n'y a pas de fonctions ... mais en POO pour autant que je me souvienne, ce sont des synonymes, tout comme invocationet call.
min

RPC invoque une procédure / une fonction - à fond.
foo

3

RPC est un ancien protocole basé sur C.Il peut invoquer une procédure distante et la faire ressembler à un appel local.RPC gère les complexités de la transmission de cet appel distant au serveur et de l'obtention du résultat au client.

Java RMI réalise également la même chose mais un peu différemment.Il utilise des références à des objets distants.Ainsi , ce qu'il fait, c'est qu'il envoie une référence à l'objet distant avec le nom de la méthode à invoquer.C'est mieux car il en résulte un plus propre le code dans le cas de programmes volumineux et la distribution d'objets sur le réseau permettent à plusieurs clients d'appeler des méthodes sur le serveur au lieu d'établir chaque connexion individuellement.


Quel protocole est "RPC", en particulier? À ma connaissance, il existe deux douzaines de protocoles pour RPC, et la moitié de ceux disponibles pour Java.
foo

@foo Il fait sans doute référence à Sun-RPC, mais tous les RPC signifient Appel de procédure à distance, aucun objet ou méthode, donc ce n'est pas vraiment pertinent.
Marquis of Lorne le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.