Основное различие между RPC и RMI состоит в том, что RPC - это механизм, который позволяет вызывать процедуру на удаленном компьютере, а RMI - это реализация RPC в Java. RPC не зависит от языка, но поддерживает только примитивные типы данных для передачи. С другой стороны, RMI ограничивается Java, но позволяет передавать объекты. RPC следует традиционным процедурным языковым конструкциям, в то время как RMI поддерживает объектно-ориентированное проектирование.
RPC, что означает Удаленный вызов процедур, является типом межпроцессного взаимодействия. Это позволяет вызывать функцию в другом процессе, запущенном на локальном компьютере или на удаленном компьютере. Эта концепция появилась давно в 1980 году, но первая известная реализация была замечена в Unix.
RPC включает в себя несколько этапов. Клиент выполняет вызов процедуры на локальном компьютере, как обычно. Модуль под названием клиентская заглушка собирает аргументы и создает сообщение и передает его операционной системе. Операционная система выполняет системный вызов и отправляет это сообщение на удаленный компьютер. Операционная система на сервере собирает сообщение и передает его модулю на сервер, который называется серверной заглушкой. Затем серверная заглушка вызывает процедуру на сервере. Наконец, результаты отправляются обратно клиенту.
Преимущество использования RPC заключается в том, что он не зависит от деталей сети. Программист просто должен указывать абстрактно, а операционная система будет следить за деталями внутренней сети. Таким образом, это облегчает программирование и позволяет RPC работать в любой сети, несмотря на физические и протокольные различия. Реализации RPC присутствуют во всех основных операционных системах, таких как Unix, Linux, Windows и OS X. Обычно RPC не зависит от языка, поэтому он ограничивает типы данных наиболее простыми, поскольку они должны быть общими для всех языков. Подход в RPC не является объектно-ориентированным, но это традиционный процедурный механизм, как в C.
RMI, что означает удаленный вызов метода, представляет собой API (интерфейс прикладного программирования), который реализует RPC в Java для поддержки объектно-ориентированной природы. Это позволяет вызывать методы Java на другой виртуальной машине Java, находящейся на том же или удаленном компьютере. Ограничением RMI является то, что можно вызывать только методы Java, но это дает преимущество в том, что объекты могут передаваться как аргументы и возвращаемые значения. Когда считается, что RMI медленнее, чем RPC, из-за использования байт-кода на виртуальной машине Java, но RMI очень удобен для программистов и очень прост в использовании..
RMI использует встроенные механизмы безопасности в Java, а также предоставляет фабрику сокетов, которая позволяет использовать нестандартные протоколы транспортного уровня, отличные от TCP. Кроме того, RMI предоставляет методы для обхода межсетевых экранов. Шаги, которые происходят в RMI, аналогичны RPC. Реализация RMI заботится о деталях внутренней сети, где программист не должен беспокоиться о них.
• RPC не зависит от языка, а RMI ограничивается Java.
• RPC является процедурным, как в C, но RMI является объектно-ориентированным.
• RPC поддерживает только примитивные типы данных, тогда как RMI позволяет передавать объекты в качестве аргументов и возвращаемых значений. При использовании RPC программист должен разделить любые составные объекты на примитивные типы данных..
• RMI легко программировать этот RPC.
• RMI медленнее, чем RPC, поскольку RMI включает выполнение байт-кода Java.
• RMI позволяет использовать шаблоны проектирования из-за объектно-ориентированной природы, в то время как RPC не имеет этой возможности.
Резюме:
RPC - это независимый от языка механизм, который позволяет вызывать процедуру на удаленном компьютере. Однако независимая от языка функция ограничивает типы данных, передаваемые в качестве аргументов, и возвращает значения примитивными типами. RMI - это реализация RPC в Java, которая также поддерживает передачу объектов, облегчая жизнь программиста. Преимущество RMI заключается в поддержке объектно-ориентированного проектирования, но недостатком Java является недостаток.
Изображения предоставлены: