В чем разница между 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 есть объекты: вместо вызова функций через функцию прокси, мы вызываем методы через прокси.

jiby
источник
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 объектов или методов, так что это не очень актуально.
Маркиз Лорн