RPC срещу RMI
Основната разлика между RPC и RMI е, че RPC е механизъм, който позволява извикване на процедура на отдалечен компютър, докато RMI е внедряването на RPC в java. RPC е езиково неутрален, но поддържа само примитивни типове данни за предаване. От друга страна, RMI е ограничен до Java, но позволява предаване на обекти. RPC следва традиционните процедурни езикови конструкции, докато RMI поддържа обектно-ориентиран дизайн.
Какво е RPC?
RPC, което означава Remote Procedure Call, е вид комуникация между процесите. Това позволява извикване на функция в друг процес, работещ на локалния или отдалечен компютър. Тази концепция се появи много отдавна през 1980 г., но първата известна реализация беше видяна в Unix.
RPC включва няколко стъпки. Клиентът извършва извикване на процедура на локалния компютър, както обикновено. Модулът, наречен клиентски стълб, събира аргументите и създава съобщение и го предава на операционната система. Операционната система извършва системно повикване и изпраща това съобщение на отдалечения компютър. Операционната система в сървъра събира съобщението и го предава на модула на сървъра, наречен сървърен стълб. Тогава сървърният стълб извиква процедурата на сървъра. Накрая резултатите се изпращат обратно на клиента.
Предимството на използването на RPC е, че е независимо от подробностите на мрежата. Програмистът просто трябва да посочи по абстрактен начин, докато операционната система ще се погрижи за детайлите на вътрешната мрежа. Така че това прави програмирането по-лесно и позволява на RPC да работи във всяка мрежа, въпреки физическите и протоколните разлики. RPC реализациите присъстват във всички основни операционни системи като Unix, Linux, Windows и OS X. RPC обикновено е езиково неутрален, следователно ограничава типовете данни до най-примитивните, тъй като те трябва да са общи за всички езици. Подходът в RPC не е обектно ориентиран, а е традиционен процедурен механизъм като в C.
Какво е RMI?
RMI, което означава Remote Method Invocation, е 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 е недостатък.