Я думаю, что RMIв Java что-то похожее gRPCна .Net ...
Юша Aleayoub
Ответы:
137
RPC основан на C, и, как таковой, он имеет семантику структурированного программирования, с другой стороны, RMI - это технология на основе Java, и она ориентирована на объект.
С помощью RPC вы можете просто вызывать удаленные функции, экспортированные на сервер, в RMI вы можете иметь ссылки на удаленные объекты и вызывать их методы, а также передавать и возвращать больше ссылок на удаленные объекты, которые могут быть распределены между многими экземплярами JVM, так что это намного более мощный ,
RMI выделяется, когда возникает необходимость в разработке чего-то более сложного, чем чисто клиент-серверная архитектура. Распределение объектов по сети очень просто, что позволяет всем клиентам обмениваться данными без необходимости явно фиксировать отдельные соединения.
Это неверно 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, что позволяет выполнять динамический вызов , когда интерфейсы могут изменяться во время выполнения, и адаптацию объектов , что обеспечивает дополнительный уровень абстракции.
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 с поддержкой объектно-ориентированных парадигм.
Вы можете думать о вызове RPC, как о вызове процедуры на Си. RPC поддерживает примитивные типы данных, в то время как RMI поддерживает параметры метода / возвращает типы как объекты Java.
RMI легко программируется в отличие от RPC. Вы можете представить свою бизнес-логику в терминах объектов, а не последовательности примитивных типов данных.
RPC не зависит от языка в отличие от RMI, который ограничен Java
RMI или удаленный вызов метода очень похожи на вызов RPC или удаленной процедуры в том, что клиент одновременно отправляет прокси-объекты (или заглушки) на сервер, однако тонкое отличие состоит в том, что RPC на стороне клиента вызывает FUNCTIONS через функцию прокси, а RMI вызывает METHODS
через прокси-функция. RMI считается немного лучше, поскольку это объектно-ориентированная версия RPC.
Метод - это то, что функции вызывается в Java, функция - это то, что метод вызывается в c / c ++. Так в чем же разница?
звездная кукуруза
1
Разница в том, что (в случае методов экземпляра) существует вызывающий объект. Вызывающий объект либо должен быть отправлен (вместе с его кодом), либо должен находиться на удаленном сервере, но иметь способ ссылки на локальный сервер.
Эллен Спертус
Игнорирование того, как конкретные языки программирования трактуют методы против функций, в литературном смысле означает, что функции возвращают значение, тогда как методы изменяют состояние.
Дан
RPC вызывает FUNCTIONS через функцию прокси, а RMI вызывает METHODS, используя прокси OBJECT. Правильно?
Нур Наваз
Клиент обычно не «отправляет прокси-объекты (или заглушки) на сервер». Плохое качество цитирования.
Маркиз Лорн
6
Единственное реальное различие между RPC и RMI состоит в том, что в RMI есть объекты: вместо вызова функций через функцию прокси, мы вызываем методы через прокси.
Какие различия вы неявно подчеркиваете, но не уточняете, между a methodи a function? В Java нет функций ... но в ООП, насколько я помню, они синонимы, а значит invocationи call.
мин
RPC вызывает процедуру / функцию - утончается.
foo
3
RPC - это старый протокол, основанный на C. Он может вызывать удаленную процедуру и делать ее похожей на локальный вызов. RPC обрабатывает сложности, связанные с передачей этого удаленного вызова на сервер и получением результата для клиента.
Java RMI также выполняет то же самое, но немного по-другому. Он использует ссылки на удаленные объекты. Так что он отправляет ссылку на удаленный объект вместе с именем вызываемого метода. Это лучше, потому что это приводит к чистоте код в случае больших программ, а также распределение объектов по сети позволяет нескольким клиентам вызывать методы на сервере, а не устанавливать каждое соединение по отдельности.
RMI
в Java что-то похожееgRPC
на .Net ...Ответы:
RPC основан на C, и, как таковой, он имеет семантику структурированного программирования, с другой стороны, RMI - это технология на основе Java, и она ориентирована на объект.
С помощью RPC вы можете просто вызывать удаленные функции, экспортированные на сервер, в RMI вы можете иметь ссылки на удаленные объекты и вызывать их методы, а также передавать и возвращать больше ссылок на удаленные объекты, которые могут быть распределены между многими экземплярами JVM, так что это намного более мощный ,
RMI выделяется, когда возникает необходимость в разработке чего-то более сложного, чем чисто клиент-серверная архитектура. Распределение объектов по сети очень просто, что позволяет всем клиентам обмениваться данными без необходимости явно фиксировать отдельные соединения.
источник
Основное различие между RPC и RMI состоит в том, что RMI включает объекты . Вместо того, чтобы вызывать процедуры удаленно с помощью прокси- функции , мы используем прокси- объект .
RMI обеспечивает большую прозрачность, а именно благодаря использованию объектов, ссылок, наследования, полиморфизма и исключений, поскольку технология интегрирована в язык.
RMI также является более продвинутым, чем RPC, что позволяет выполнять динамический вызов , когда интерфейсы могут изменяться во время выполнения, и адаптацию объектов , что обеспечивает дополнительный уровень абстракции.
источник
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 (простой протокол доступа к объектам)
источник
Удаленный вызов процедур (RPC) - это межпроцессное взаимодействие, которое позволяет вызывать функцию в другом процессе, находящемся на локальном или удаленном компьютере.
Удаленный вызов метода (RMI) - это API, который реализует RPC в Java с поддержкой объектно-ориентированных парадигм.
Вы можете думать о вызове RPC, как о вызове процедуры на Си. RPC поддерживает примитивные типы данных, в то время как RMI поддерживает параметры метода / возвращает типы как объекты Java.
RMI легко программируется в отличие от RPC. Вы можете представить свою бизнес-логику в терминах объектов, а не последовательности примитивных типов данных.
RPC не зависит от языка в отличие от RMI, который ограничен Java
RMI немного медленнее RPC
Посмотрите на эту статью для реализации RPC в C
источник
От сюда .
Для получения дополнительной информации и примеров, посмотрите здесь .
источник
Единственное реальное различие между RPC и RMI состоит в том, что в RMI есть объекты: вместо вызова функций через функцию прокси, мы вызываем методы через прокси.
источник
Разница между RMI и RPC заключается в том, что:
источник
method
и afunction
? В Java нет функций ... но в ООП, насколько я помню, они синонимы, а значитinvocation
иcall
.RPC - это старый протокол, основанный на C. Он может вызывать удаленную процедуру и делать ее похожей на локальный вызов. RPC обрабатывает сложности, связанные с передачей этого удаленного вызова на сервер и получением результата для клиента.
Java RMI также выполняет то же самое, но немного по-другому. Он использует ссылки на удаленные объекты. Так что он отправляет ссылку на удаленный объект вместе с именем вызываемого метода. Это лучше, потому что это приводит к чистоте код в случае больших программ, а также распределение объектов по сети позволяет нескольким клиентам вызывать методы на сервере, а не устанавливать каждое соединение по отдельности.
источник