RPC a RMI
Podstawową różnicą między RPC a RMI jest to, że RPC jest mechanizmem umożliwiającym wywołanie procedury na zdalnym komputerze, podczas gdy RMI to implementacja RPC w java. RPC jest neutralny językowo, ale obsługuje tylko pierwotne typy danych do przekazania. Z drugiej strony RMI ogranicza się do Javy, ale umożliwia przekazywanie obiektów. RPC jest zgodny z tradycyjnymi konstrukcjami języka proceduralnego, podczas gdy RMI obsługuje projektowanie zorientowane obiektowo.
Co to jest RPC?
RPC, co oznacza Remote Procedure Call, to rodzaj komunikacji między procesami. Pozwala to na wywołanie funkcji w innym procesie działającym na komputerze lokalnym lub zdalnym. Ta koncepcja pojawiła się dawno temu, w 1980 roku, ale pierwszą słynną implementację zaobserwowano w systemie Unix.
RPC obejmuje kilka kroków. Klient jak zwykle wykonuje wywołanie procedury na komputerze lokalnym. Moduł o nazwie client stub zbiera argumenty i tworzy wiadomość i przekazuje do systemu operacyjnego, System operacyjny wykonuje wywołanie systemowe i wysyła tę wiadomość do zdalnego komputera. System operacyjny na serwerze zbiera wiadomość i przekazuje do modułu na serwerze o nazwie server stub. Następnie serwer pośredniczący wywołuje procedurę na serwerze. Na koniec wyniki są odsyłane do klienta.
Zaletą korzystania z RPC jest to, że jest ono niezależne od szczegółów sieci. Programista musi jedynie określić w sposób abstrakcyjny, podczas gdy system operacyjny zajmie się szczegółami sieci wewnętrznej. Ułatwia to programowanie i umożliwia działanie RPC w dowolnej sieci pomimo różnic fizycznych i protokołów. Implementacje RPC są obecne we wszystkich popularnych systemach operacyjnych, takich jak Unix, Linux, Windows i OS X. RPC jest generalnie neutralne językowo, dlatego ogranicza typy danych do najbardziej prymitywnych, ponieważ muszą one być wspólne dla wszystkich języków. Podejście w RPC nie jest zorientowane obiektowo, ale jest to tradycyjny mechanizm proceduralny, jak w C.
Co to jest RMI?
RMI, co oznacza zdalne wywołanie metod, to interfejs API (interfejs programowania aplikacji), który implementuje RPC w java, aby wspierać naturę zorientowaną obiektowo. Pozwala to na wywołanie metod Java na innej wirtualnej maszynie Java 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 wartości zwracane. Gdy bierze się pod uwagę wydajność, RMI jest wolniejszy niż RPC ze względu na zaangażowanie kodu bajtowego na maszynie wirtualnej 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, dzięki czemu programista nie musi się o nie martwić.
Jaka jest różnica między RPC a RMI?
• RPC jest neutralne językowo, podczas gdy RMI jest ograniczone do Javy.
• RPC działa proceduralnie jak w C, ale RMI jest zorientowany obiektowo.
• RPC obsługuje tylko podstawowe typy danych, podczas gdy RMI umożliwia przekazywanie obiektów jako argumentów i wartości zwracanych. Korzystając z RPC, programista musi podzielić dowolne obiekty złożone na prymitywne typy danych.
• RMI jest łatwy do zaprogramowania w RPC.
• RMI jest wolniejszy niż RPC, ponieważ RMI obejmuje wykonanie kodu bajtowego java.
• RMI umożliwia korzystanie z wzorców projektowych ze względu na naturę zorientowaną obiektowo, podczas gdy RPC nie ma takiej możliwości.
Podsumowanie:
RPC a RMI
RPC to mechanizm neutralny językowo, który umożliwia wywoływanie procedury na zdalnym komputerze. Jednak funkcja neutralna językowo ogranicza typy danych, które są przekazywane jako argumenty i zwracają wartości do typów pierwotnych. RMI to implementacja RPC w Javie i obsługuje również przekazywanie obiektów, ułatwiając życie programistom. Zaletą RMI jest obsługa projektowania zorientowanego obiektowo, ale ograniczenie do Javy jest wadą.