В чем разница между Java RMI и RPC?


163

Какова реальная разница между Java RMI и RPC?

Я читал в некоторых местах, что RMI использует объекты?


Я думаю, что RMIв Java что-то похожее gRPCна .Net ...
Юша 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.
Навин Исрани

может ли клиент 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. Пожалуйста подтвердите !
Gunjan Shah

11

Удаленный вызов процедур (RPC) - это межпроцессное взаимодействие, которое позволяет вызывать функцию в другом процессе, находящемся на локальном или удаленном компьютере.

Удаленный вызов метода (RMI) - это API, который реализует RPC в Java с поддержкой объектно-ориентированных парадигм.

  1. Вы можете думать о вызове RPC, как о вызове процедуры на Си. RPC поддерживает примитивные типы данных, в то время как RMI поддерживает параметры метода / возвращает типы как объекты Java.

  2. RMI легко программируется в отличие от RPC. Вы можете представить свою бизнес-логику в терминах объектов, а не последовательности примитивных типов данных.

  3. RPC не зависит от языка в отличие от RMI, который ограничен Java

  4. RMI немного медленнее RPC

Посмотрите на эту статью для реализации RPC в C


6

RMI или удаленный вызов метода очень похожи на вызов RPC или удаленной процедуры в том, что клиент одновременно отправляет прокси-объекты (или заглушки) на сервер, однако тонкое отличие состоит в том, что RPC на стороне клиента вызывает FUNCTIONS через функцию прокси, а RMI вызывает METHODS через прокси-функция. RMI считается немного лучше, поскольку это объектно-ориентированная версия RPC.

От сюда .

Для получения дополнительной информации и примеров, посмотрите здесь .


5
Метод - это то, что функции вызывается в Java, функция - это то, что метод вызывается в c / c ++. Так в чем же разница?
звездная кукуруза

1
Разница в том, что (в случае методов экземпляра) существует вызывающий объект. Вызывающий объект либо должен быть отправлен (вместе с его кодом), либо должен находиться на удаленном сервере, но иметь способ ссылки на локальный сервер.
Эллен Спертус

Игнорирование того, как конкретные языки программирования трактуют методы против функций, в литературном смысле означает, что функции возвращают значение, тогда как методы изменяют состояние.
Дан

RPC вызывает FUNCTIONS через функцию прокси, а RMI вызывает METHODS, используя прокси OBJECT. Правильно?
Нур Наваз

Клиент обычно не «отправляет прокси-объекты (или заглушки) на сервер». Плохое качество цитирования.
Маркиз Лорн

6

Единственное реальное различие между RPC и RMI состоит в том, что в RMI есть объекты: вместо вызова функций через функцию прокси, мы вызываем методы через прокси.


6

Разница между RMI и RPC заключается в том, что:

  • RMI как имя указывает на удаленный вызов метода: он вызывает метод или объект. И
  • RPC вызывает функцию.

2
Какие различия вы неявно подчеркиваете, но не уточняете, между a methodи a function? В Java нет функций ... но в ООП, насколько я помню, они синонимы, а значит invocationи call.
мин

RPC вызывает процедуру / функцию - утончается.
foo

3

RPC - это старый протокол, основанный на C. Он может вызывать удаленную процедуру и делать ее похожей на локальный вызов. RPC обрабатывает сложности, связанные с передачей этого удаленного вызова на сервер и получением результата для клиента.

Java RMI также выполняет то же самое, но немного по-другому. Он использует ссылки на удаленные объекты. Так что он отправляет ссылку на удаленный объект вместе с именем вызываемого метода. Это лучше, потому что это приводит к чистоте код в случае больших программ, а также распределение объектов по сети позволяет нескольким клиентам вызывать методы на сервере, а не устанавливать каждое соединение по отдельности.


Какой протокол является "RPC", в частности? Насколько мне известно, есть два десятка протоколов для RPC и половина из них доступны для Java.
Foo

@foo Нет сомнений, что он имеет в виду Sun-RPC, но все RPC означают Удаленный вызов процедур, nO объектов или методов, так что это не очень актуально.
Маркиз Лорн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.