Jaka jest różnica między Java RMI a RPC?

163

Jaka jest rzeczywista różnica między Java RMI a RPC?

Czytałem w niektórych miejscach, że RMI używa Objects?

Aran
źródło
Myślę, że RMIw Javie jest coś takiego jak gRPCw .Net ...
Yousha Aleayoub

Odpowiedzi:

137

RPC jest oparty na C i jako taki ma semantykę programowania strukturalnego, z drugiej strony RMI jest technologią opartą na Javie i jest zorientowana obiektowo.

Dzięki RPC możesz po prostu wywołać zdalne funkcje wyeksportowane na serwer, w RMI możesz mieć odniesienia do zdalnych obiektów i wywoływać ich metody, a także przekazywać i zwracać więcej odwołań do zdalnych obiektów, które mogą być dystrybuowane między wieloma instancjami JVM, dzięki czemu jest znacznie bardziej wydajny .

RMI wyróżnia się, gdy pojawia się potrzeba opracowania czegoś bardziej złożonego niż czysta architektura klient-serwer. Bardzo łatwo jest rozłożyć obiekty w sieci, umożliwiając wszystkim klientom komunikację bez konieczności jawnego ustanawiania indywidualnych połączeń.

fortran
źródło
19
To jest niepoprawne. RPC jest również oparty na Javie. JAX-RPC 1.1 został zastąpiony przez 2.0, którego nazwa została zmieniona na JAX-WS. W Javie, kiedy mówisz o RPC, masz na myśli SOAP i Web Services. Oto artykuł IBM dotyczący zmiany JAX-RPC 1.1 na JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC
1
@MattC Myślę, że artykuł, do którego odsyłałeś, wskazywał, że powodem zmiany nazwy z „JAX-RPC” na „JAX-WS” jest właśnie to, że oryginalna nazwa nie była dokładna, ponieważ ta specyfikacja dotyczyła czegoś więcej niż tylko „RPC” w tradycyjnym sensie. Zatem ta odpowiedź, która mówi o tym, co tradycyjnie oznacza RPC, jest nadal poprawna.
xji
2
tak, miałem na myśli to, że RPC wywodzi się ze świata C / Unix (przynajmniej najczęstsza implementacja RPC, ONCRPC) i jako takie jest wzorowane na tym modelu obliczeniowym; oczywiście nic nie stoi na przeszkodzie, aby zaimplementować go na dodatek do każdego innego języka programowania
fortran
6
Niewielka różnica opinii na temat sposobu użycia semantyki nie powoduje, że odpowiedź jest błędna (lub wprowadzająca w błąd). Każdy, kto to przeczyta, może łatwo zrozumieć, że „oparty na C” oznacza w zasadzie „zorientowany na procedury” - każdy, kto nauczył się języka Java, zna różnicę między protokołami POP a OOP.
Navin Israni
czy klient nodejs (powiedzmy) może wywołać wywołania RMI na serwerze? Czy jest taki sposób?
Hitesh Bajaj
45

Główna różnica między RPC i RMI polega na tym, że RMI obejmuje obiekty . Zamiast zdalnie wywoływać procedury za pomocą funkcji proxy , używamy zamiast tego obiektu proxy .

RMI zapewnia większą przejrzystość, a mianowicie z powodu wykorzystywania obiektów, odniesień, dziedziczenia, polimorfizmu i wyjątków, ponieważ technologia jest zintegrowana z językiem.

RMI jest również bardziej zaawansowany niż RPC, umożliwiając dynamiczne wywoływanie , w którym interfejsy mogą się zmieniać w czasie wykonywania, oraz adaptację obiektów , co zapewnia dodatkową warstwę abstrakcji.

Humphrey Bogart
źródło
18

1. Podejście:

RMI używa paradygmatu zorientowanego obiektowo, w którym użytkownik musi znać obiekt i metodę obiektu, który musi wywołać.

RPC nie obsługuje obiektów. Raczej wywołuje określone podprogramy, które są już ustanowione.

2. Praca:

Dzięki RPC otrzymujesz wywołanie procedury, które wygląda prawie jak wywołanie lokalne. RPC radzi sobie ze złożonością związaną z przekazywaniem wywołania z komputera lokalnego do zdalnego.

RMI robi to samo, ale RMI przekazuje odniesienie do obiektu i metody, która jest wywoływana.

RMI = RPC + Object-Orientation

3. Lepszy:

RMI jest lepszym podejściem w porównaniu do RPC, zwłaszcza w przypadku większych programów, ponieważ zapewnia bardziej przejrzysty kod, który jest łatwiejszy do zidentyfikowania, jeśli coś pójdzie nie tak.

4. Przykłady systemów:

Systemy RPC: SUN RPC, DCE RPC

Systemy RMI: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Simple Object Access Protocol)

Dhaval Simaria
źródło
W mojej aplikacji używam JAX-WS do ujawniania / konsumowania usług mydlanych. Czy mogę to nazwać mechanizmem typu RPC? Zgodnie z moim zrozumieniem, w JAX-WS wywołujemy metodę zdalną za pomocą interfejsu API refleksji java. Więc jego zgodność z definicją RPC. Proszę potwierdzić !
Gunjan Shah,
11

Zdalne wywołanie procedury (RPC) to komunikacja między procesami, która umożliwia wywołanie funkcji w innym procesie znajdującym się na komputerze lokalnym lub zdalnym.

Zdalne wywołanie metody (RMI) to API, które implementuje RPC w Javie z obsługą paradygmatów obiektowych.

  1. Możesz myśleć o wywołaniu RPC jak wywołanie procedury w C. RPC obsługuje prymitywne typy danych, w których RMI obsługuje parametry metod / typy zwracane jako obiekty Java.

  2. W przeciwieństwie do RPC RMI jest łatwy do zaprogramowania. Możesz myśleć o swojej logice biznesowej w kategoriach obiektów, a nie sekwencji pierwotnych typów danych.

  3. RPC jest neutralny językowo w przeciwieństwie do RMI, który jest ograniczony do języka Java

  4. RMI jest nieco wolniejszy niż RPC

Zapoznaj się z tym artykułem dotyczącym implementacji RPC w języku C

Ravindra babu
źródło
6

RMI lub zdalne wywołanie metody jest bardzo podobne do wywołania RPC lub procedury zdalnej w tym, że klient zarówno wysyła obiekty proxy (lub kody pośredniczące) do serwera, jednak subtelna różnica polega na tym, że RPC po stronie klienta wywołuje FUNKCJE za pośrednictwem funkcji proxy, a RMI wywołuje METODY za pośrednictwem funkcja proxy. RMI jest uważany za nieco lepszy, ponieważ jest zorientowaną obiektowo wersją RPC.

Od tutaj .

Aby uzyskać więcej informacji i przykładów, zajrzyj tutaj .

Kyle Rosendo
źródło
5
metoda jest tym, co wywołuje się funkcje w języku java, funkcja to metoda wywoływana w języku c / c ++. Więc nadal jaka jest różnica?
starcorn
1
Różnica polega na tym, że (w przypadku metod instancji) istnieje obiekt wywołujący. Obiekt wywołujący musi zostać wysłany (wraz z jego kodem) lub musi znajdować się na serwerze usuwania, ale istnieje możliwość odniesienia się do niego na serwerze lokalnym.
Ellen Spertus
Ignorując sposób, w jaki określone języki programowania traktują metody w porównaniu z funkcjami, znaczenie literackie jest takie, że funkcje zwracają wartość, podczas gdy metody modyfikują stan.
Dan,
RPC wywołuje FUNKCJE poprzez funkcję proxy, a RMI wywołuje METODY przy użyciu proxy OBJECT. Dobrze?
Noor Nawaz
Klient normalnie nie „wysyła obiektów proxy (lub kodów pośredniczących) do serwera”. Cytat o niskiej jakości.
Markiz Lorne
6

Jedyną prawdziwą różnicą między RPC a RMI jest to, że w RMI są zaangażowane obiekty: zamiast wywoływać funkcje przez funkcję proxy, wywołujemy metody przez proxy.

jiby
źródło
6

Różnica między RMI i RPC polega na tym, że:

  • RMI, ponieważ nazwa wskazuje na zdalne wywołanie metody: wywołuje metodę lub obiekt. I
  • RPC wywołuje funkcję.
siostrzyczko
źródło
2
Jakie różnice między a methoda a pan pośrednio podkreśla, ale których nie wyjaśniacie function? W Javie nie ma funkcji ... ale w OOP, o ile pamiętam, są synonimami, tak samo jak invocationi call.
min
RPC wywołuje procedurę / funkcję - całkowicie.
foo
3

RPC jest starym protokołem opartym na C. Może wywołać zdalną procedurę i sprawić, że będzie wyglądać jak wywołanie lokalne. RPC radzi sobie ze złożonością przekazywania tego zdalnego wywołania do serwera i dostarczania wyniku do klienta.

Java RMI również osiąga to samo, ale nieco inaczej, używa odwołań do obiektów zdalnych , więc wysyła referencję do obiektu zdalnego wraz z nazwą metody do wywołania.To jest lepsze, ponieważ skutkuje czystszym kod w przypadku dużych programów, a także dystrybucja obiektów w sieci umożliwia wielu klientom wywoływanie metod na serwerze zamiast nawiązywania każdego połączenia z osobna.

Ruben Bhattacharya
źródło
Który protokół to w szczególności „RPC”? O ile mi wiadomo, istnieją dwa tuziny protokołów dla RPC i połowa z nich dostępna dla Javy.
foo
@foo Bez wątpienia ma na myśli Sun-RPC, ale wszystkie RPC oznaczają zdalne wywołanie procedury, brak obiektów lub metod, więc nie jest to tak naprawdę istotne.
Markiz Lorne