Podstawowa różnica między RPC i RMI polega na tym, że RPC jest mechanizmem umożliwiającym wywołanie procedury na komputerze zdalnym, podczas gdy RMI jest implementacją RPC w Javie. RPC jest neutralne językowo, ale obsługuje tylko podstawowe typy danych do przekazania. Z drugiej strony RMI ogranicza się do Javy, ale umożliwia przekazywanie obiektów. RPC postępuje zgodnie z tradycyjnymi konstrukcjami języka proceduralnego, podczas gdy RMI obsługuje projektowanie obiektowe.
RPC, co oznacza Zdalne wywołanie procedury, jest rodzajem komunikacji międzyprocesowej. Umożliwia to wywołanie funkcji w innym procesie uruchomionym na komputerze lokalnym lub komputerze zdalnym. Ta koncepcja pojawiła się dawno temu w 1980 roku, ale pierwsza słynna implementacja została zaobserwowana w Uniksie.
RPC obejmuje kilka etapów. Klient jak zwykle wykonuje wywołanie procedury na komputerze lokalnym. Moduł zwany skrótem klienta zbiera argumenty i tworzy komunikat i przekazuje do systemu operacyjnego. System operacyjny wykonuje wywołanie systemowe i wysyła ten komunikat do komputera zdalnego. System operacyjny na serwerze zbiera komunikat i przechodzi do modułu na serwerze zwanego kodem pośredniczącym serwera. Następnie kod pośredniczący serwera wywołuje procedurę na serwerze. Na koniec wyniki są wysyłane z powrotem do klienta.
Zaletą korzystania z RPC jest to, że jest on niezależny od szczegółów sieci. Programista musi jedynie określić w abstrakcyjny sposób, podczas gdy system operacyjny będzie dbał o szczegóły wewnętrznej sieci. Ułatwia to programowanie i pozwala RPC pracować w dowolnej sieci, pomimo różnic fizycznych i protokołów. Implementacje RPC są obecne we wszystkich głównych systemach operacyjnych, takich jak Unix, Linux, Windows i OS X. RPC jest ogólnie neutralne językowo, dlatego ogranicza typy danych do najbardziej prymitywnych, ponieważ muszą być wspólne dla wszystkich języków. Podejście w RPC nie jest zorientowane obiektowo, ale jest tradycyjnym mechanizmem proceduralnym, jak w C.
RMI, czyli skrót od Remote Method Invocation, to interfejs API (Application Programming Interface), który implementuje RPC w Javie do obsługi obiektów zorientowanych obiektowo. Umożliwia to wywoływanie metod Java na innej maszynie wirtualnej Java znajdującej się na tym samym komputerze lub na komputerze zdalnym. Ograniczeniem RMI jest to, że można wywoływać tylko metody Java, ale ma tę zaletę, że obiekty mogą być przekazywane jako argumenty i zwracane wartości. Gdy rozważana jest wydajność, RMI jest wolniejszy niż RPC z powodu zaangażowania kodu bajtowego na maszynie wirtualnej Java, ale RMI jest bardzo przyjazny dla programistów i jest bardzo łatwy w użyciu.
RMI wykorzystuje wbudowane mechanizmy bezpieczeństwa w Javie, a także daje fabrykę gniazd, która umożliwia korzystanie z protokołów niestandardowych warstw transportowych innych niż TCP. Ponadto RMI zapewnia metody omijania zapór ogniowych. Kroki występujące w RMI są podobne do RPC. Implementacja RMI dba o szczegóły wewnętrznej sieci, w których programista nie musi się o nie martwić.
• RPC jest neutralne językowo, podczas gdy RMI jest ograniczone do Java.
• RPC jest proceduralne jak w C, ale RMI jest zorientowane obiektowo.
• RPC obsługuje tylko pierwotne typy danych, a RMI pozwala na przekazywanie obiektów jako argumentów i zwracanie wartości. Korzystając z RPC, programista musi podzielić dowolne obiekty złożone na pierwotne typy danych.
• RMI jest łatwy do zaprogramowania RPC.
• RMI jest wolniejszy niż RPC, ponieważ RMI wymaga wykonania kodu bajtowego Java.
• RMI pozwala na stosowanie wzorców projektowych ze względu na naturę obiektową, podczas gdy RPC nie ma takiej możliwości.
Streszczenie:
RPC to neutralny językowo mechanizm, który umożliwia wywołanie procedury na komputerze zdalnym. Jednak funkcja neutralna językowo ogranicza typy danych przekazywane jako argumenty i zwracają wartości do typów pierwotnych. RMI jest implementacją RPC w Javie i obsługuje również przekazywanie obiektów, ułatwiając życie programistom. Zaletą RMI jest wsparcie projektowania obiektowego, ale ograniczenie do Javy jest wadą.
Obrazy dzięki uprzejmości: