RPC vs RMI
Podstawowa różnica między RPC i RMI polega na tym, że RPC jest mechanizmem umożliwiającym wywołanie procedury na zdalnym komputerze, podczas gdy RMI to implementacja RPC w Javie. RPC jest neutralny językowo, ale obsługuje tylko prymitywne typy danych do przekazania. Z drugiej strony RMI ogranicza się do języka Java, ale umożliwia przekazywanie obiektów. RPC jest zgodny z tradycyjnymi konstrukcjami języka proceduralnego, podczas gdy RMI obsługuje projektowanie obiektowe.
Co to jest RPC?
RPC, co oznacza zdalne wywołanie procedury, to rodzaj komunikacji między procesami. 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 pierwszą słynną implementację zaobserwowano w Uniksie.
RPC składa się z kilku kroków. Klient w zwykły sposób wykonuje wywołanie procedury na komputerze lokalnym. Moduł o nazwie client stub zbiera argumenty i tworzy wiadomość i przekazuje ją do systemu operacyjnego. Operating system wykonuje wywołanie systemowe i wysyła tę wiadomość do zdalnego komputera. System operacyjny na serwerze zbiera wiadomość i przekazuje ją do modułu na serwerze o nazwie server stub. Następnie stub serwera wywołuje procedurę na serwerze. Na koniec wyniki są odsyłane do klienta.
Zaletą używania RPC jest niezależność od szczegółów sieci. Programista musi po prostu określić w sposób abstrakcyjny, kiedy system operacyjny będzie dbał o szczegóły sieci wewnętrznej. Ułatwia to więc programowanie i pozwala RPC działać 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 generalnie neutralny 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, takim jak w C.
Co to jest RMI?
RMI, co oznacza zdalne wywołanie metody, to API (interfejs programowania aplikacji), które implementuje RPC w Javie, aby wspierać naturę zorientowaną obiektowo. Umożliwia to wywoływanie metod Javy na innej wirtualnej maszynie Javy znajdującej się na tym samym lub zdalnym komputerze. Ograniczeniem RMI jest to, że można wywoływać tylko metody Java, ale ma to tę zaletę, że obiekty mogą być przekazywane jako argumenty i zwracane wartości. Jeśli weźmie się pod uwagę wydajność, RMI jest wolniejszy niż RPC ze względu na użycie kodu bajtowego w wirtualnej maszynie Java, ale RMI jest bardzo przyjazny dla programistów i bardzo łatwy w użyciu.
RMI wykorzystuje wbudowane mechanizmy bezpieczeństwa w Javie, a także udostępnia fabrykę gniazd, która umożliwia korzystanie z niestandardowych protokołów warstwy transportowej innych niż TCP. Ponadto RMI zapewnia metody omijania zapór. Kroki wykonywane w RMI są podobne do RPC. Implementacja RMI dba o szczegóły sieci wewnętrznej, gdzie programista nie musi się o nie martwić.
Jaka jest różnica między RPC a RMI?
• RPC jest neutralny językowo, podczas gdy RMI jest ograniczony do języka Java.
• RPC jest proceduralny jak w C, ale RMI jest zorientowany obiektowo.
• RPC obsługuje tylko pierwotne typy danych, podczas gdy RMI pozwala na przekazywanie obiektów jako argumenty i zwracanie wartości. Używając RPC, programista musi podzielić wszystkie złożone obiekty na prymitywne typy danych.
• RMI jest łatwy do zaprogramowania RPC.
• RMI jest wolniejszy niż RPC, ponieważ RMI obejmuje wykonanie kodu bajtowego Java.
• RMI umożliwia stosowanie wzorców projektowych ze względu na charakter zorientowany obiektowo, podczas gdy RPC nie ma takiej możliwości.
Streszczenie:
RPC vs RMI
RPC to mechanizm neutralny językowo, który umożliwia wywołanie procedury na komputerze zdalnym. Jednak funkcja neutralna językowo ogranicza typy danych, które są 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 programisty. Zaletą RMI jest obsługa projektowania zorientowanego obiektowo, ale wadą jest ograniczenie do języka Java.
Zdjęcia dzięki uprzejmości: