Чим відрізняється Java RMI від RPC?


163

Яка фактична різниця між Java RMI і RPC?

Я читав, де RMI використовує об'єкти?


Я думаю, що RMIв Java щось подібне 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 та веб-сервіси. Ось стаття IBM про зміну JAX-RPC 1.1 на JAX-WS. 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

Чи може клієнт 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 (Простий протокол доступу до об'єктів)


У своїй програмі я використовую JAX-WS для викриття / споживання мильних послуг. Чи можна назвати це механізмом типу RPC? Як я розумію, в JAX-WS ми використовуємо віддалений метод за допомогою API відображення Java. Тож його відповідність визначенню RPC. Будь-ласка підтвердіть !
Гунян Шах

11

Віддалений виклик процедури (RPC) - це міжпроцесовий зв'язок, який дозволяє викликати функцію в іншому процесі, що знаходиться в локальній або віддаленій машині.

Віддалений виклик методу (RMI) - це API, який реалізує RPC в Java з підтримкою об'єктно-орієнтованих парадигм.

  1. Можна подумати, що викликати RPC - це як викликати процедуру C. RPC підтримує примітивні типи даних, де як параметри методу підтримки RMI / типи повернення як об'єкти Java.

  2. RMI легко програмувати на відміну від RPC. Ви можете думати про свою логіку бізнесу щодо об'єктів замість послідовності примітивних типів даних.

  3. RPC - мова нейтральна на відміну від RMI, яка обмежена Java

  4. RMI трохи повільніше RPC

Подивіться цю статтю про реалізацію RPC в C


6

RMI або Remote Method Invokation дуже схожий на виклик RPC або Remote Procedure, оскільки клієнт обидва надсилає проксі-об'єкти (або заглушки) на сервер, однак тонка різниця полягає в тому, що RPC на стороні клієнта викликає FUNCTIONS через функцію proxy і RMI викликає METHODS через функція проксі. RMI вважається дещо вищим, оскільки це об'єктно-орієнтована версія RPC.

Від сюди .

Для отримання додаткової інформації та прикладів, подивіться тут .


5
метод - це те, що функції викликається в java, функція - це те, що метод називається в c / c ++. Так все-таки яка різниця?
зоряний корч

1
Різниця полягає в тому, що (у випадку методів екземпляра) існує об'єкт, що викликає. Об'єкт, що викликає, або повинен бути надісланий (разом з його кодом), або потрібно жити на сервері видалення, але мати спосіб посилання на локальний сервер.
Еллен Спертус

Ігноруючи, як конкретні мови програмування трактують методи проти функцій, літературний сенс полягає в тому, що функції повертають значення, тоді як методи змінюють стан.
Дан

RPC викликає функції FUNCTIONS через функцію проксі, а RMI викликає METHODS за допомогою проксі-об'єкта. Правильно?
Noor Nawaz

Зазвичай клієнт "не надсилає проксі-об'єкти (або заглушки) на сервер". Цитування поганої якості.
Маркіз Лорн

6

Єдина реальна відмінність RPC від RMI полягає в тому, що в RMI є об'єкти, задіяні: замість виклику функцій через функцію проксі, ми викликаємо методи через проксі.


6

Різниця між RMI та RPC полягає в тому, що:

  • RMI як назва вказує на віддалений виклик методу: він викликає метод або об'єкт. І
  • RPC він викликає функцію.

2
Які відмінності ви неявно підкреслюєте, але не уточнюєте, між a methodі a function? У Java немає функцій ... але в OOP, наскільки я пам'ятаю, вони є синонімами, і так є invocationі є call.
хвилини

RPC викликає процедуру / функцію - вирівнювання.
foo

3

RPC - це старий протокол, заснований на C. Він може викликати віддалену процедуру і зробити її схожою на локальний call.RPC обробляє складності передачі цього віддаленого виклику на сервер та отримання результату клієнту.

Java RMI також досягає того ж самого, але трохи інакше. Він використовує посилання на віддалені об'єкти . Отже, що він робить, це те, що він надсилає посилання на віддалений об'єкт разом з ім'ям методу для виклику. Це краще, оскільки це призводить до очищення код у разі великих програм, а також розподіл об'єктів по мережі дозволяє декільком клієнтам викликати методи на сервері замість встановлення кожного з'єднання окремо.


Який протокол конкретно є "RPC"? Наскільки мені відомо, є два десятки протоколів для RPC, і половина доступних для Java.
foo

@foo Без сумніву, він має на увазі Sun-RPC, але всі RPC означають віддалений виклик процедури, nO-об'єкти чи методи, тому це не є дійсно актуальним.
Маркіз Лорн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.