Основната разлика между 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 (Application Programming Interface), който реализира RPC в Java, за да поддържа обектно ориентирана природа. Това позволява извикване на Java методи на друга Java Virtual машина, пребиваваща на същия компютър или отдалечен. Ограничението на 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 е недостатък.
С любезност на изображенията: