Základný rozdiel medzi RPC a RMI je v tom, že RPC je mechanizmus, ktorý umožňuje volanie procedúry na vzdialenom počítači, zatiaľ čo RMI je implementácia RPC v jave. RPC je jazykovo neutrálny, ale podporuje iba primitívne typy údajov, ktoré sa majú odovzdať. Na druhej strane je RMI obmedzené na Java, ale umožňuje odovzdávanie objektov. RPC sleduje tradičné procedurálne jazykové konštrukcie, zatiaľ čo RMI podporuje objektovo orientovaný dizajn.
RPC, čo je skratka pre Remote Call Call, je typ medziprocesovej komunikácie. To umožňuje volať funkciu v inom procese bežiacom na lokálnom alebo vzdialenom počítači. Tento koncept sa objavil už dávno v roku 1980, ale prvá slávna implementácia sa zaznamenala v Unixe.
RPC zahŕňa niekoľko krokov. Klient na lokálnom počítači vyvolá procedúru obvyklým spôsobom. Modul s názvom klientský výhonok zhromažďuje argumenty a vytvára správu a odovzdáva operačnému systému. Operačný systém vykoná systémové volanie a odošle túto správu do vzdialeného počítača. Operačný systém na serveri zhromažďuje správu a prechádza do modulu na serveri nazývaného serverový výhonok. Potom server stub zavolá procedúru na serveri. Nakoniec sú výsledky zaslané späť klientovi.
Výhodou použitia RPC je, že je nezávislá od podrobností o sieti. Programátor musí špecifikovať abstraktne, zatiaľ čo operačný systém sa bude starať o podrobnosti vnútornej siete. To uľahčuje programovanie a umožňuje RPC pracovať v akejkoľvek sieti napriek fyzickým a protokolovým rozdielom. Implementácie RPC sú prítomné vo všetkých bežných operačných systémoch, ako sú Unix, Linux, Windows a OS X. RPC je vo všeobecnosti jazykovo neutrálny, a preto obmedzuje typy údajov na tie najprimitívnejšie, pretože musia byť spoločné pre všetky jazyky. Prístup v RPC nie je objektovo orientovaný, ale je to tradičný procedurálny mechanizmus ako v C.
RMI, čo je skratka pre Remote Method Invocation, je API (Application Programming Interface), ktoré implementuje RPC v jave na podporu objektovo orientovanej povahy. To umožňuje volanie metód Java na inom virtuálnom stroji Java umiestnenom na rovnakom alebo vzdialenom počítači. Obmedzenie RMI spočíva v tom, že je možné použiť iba metódy Java, ale to má tú výhodu, že objekty možno odovzdať ako argumenty a návratové hodnoty. Keď je výkon považovaný za RMI pomalší ako RPC kvôli zapojeniu bytecode do Java Virtual Machine, ale RMI je veľmi programátorsky prívetivý a jeho použitie je veľmi jednoduché.
RMI používa zabudované bezpečnostné mechanizmy v Java a tiež dáva soketovú továreň, ktorá umožňuje použitie vlastných protokolov transportnej vrstvy, ktoré nie sú TCP. Okrem toho RMI poskytuje metódy na obchádzanie brán firewall. Kroky, ktoré sa vyskytujú v RMI, sú podobné RPC. Implementácia RMI sa stará o podrobnosti vnútornej siete, kde sa ich programátor nemusí obávať.
• RPC je jazykovo neutrálny, zatiaľ čo RMI je obmedzené na Java.
• RPC je procedurálne ako v C, ale RMI je objektovo orientovaný.
• RPC podporuje iba primitívne typy údajov, zatiaľ čo RMI umožňuje odovzdávanie objektov ako argumentov a návratových hodnôt. Pri použití RPC musí programátor rozdeliť všetky zložené objekty na primitívne typy údajov.
• RMI sa dá RPC ľahko programovať.
• RMI je pomalší ako RPC, pretože RMI zahŕňa vykonanie java bajtkódu.
• RMI umožňuje použitie konštrukčných vzorov kvôli objektovo orientovanej povahe, zatiaľ čo RPC túto schopnosť nemá.
Zhrnutie:
RPC je jazykovo neutrálny mechanizmus, ktorý umožňuje volanie procedúry na vzdialenom počítači. Jazykovo neutrálna funkcia však obmedzuje typy údajov, ktoré sa odovzdávajú ako argumenty a vracajú hodnoty na primitívne typy. RMI je implementácia RPC v Jave a podporuje aj odovzdávanie objektov, čo zjednodušuje život programátora. Výhodou RMI je podpora objektovo orientovaného dizajnu, ale nevýhodou je obmedzenie na Java.
Snímky s láskavým dovolením: