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