Den grundlæggende forskel mellem RPC og RMI er, at RPC er en mekanisme, der gør det muligt at kalde en procedure på en fjerncomputer, mens RMI er implementeringen af RPC i java. RPC er sprogneutral, men understøtter kun primitive datatyper, der skal videregives. På den anden side er RMI begrænset til Java, men tillader passerende objekter. RPC følger traditionelle proceduresprogkonstruktioner, mens RMI understøtter objektorienteret design.
RPC, der står for Remote Procedure Call, er en type interproces-kommunikation. Dette gør det muligt at kalde en funktion i en anden proces, der kører på den lokale computer eller en fjerncomputer. Dette koncept opstod for længe siden i 1980, men den første berømte implementering blev set i Unix.
RPC involverer flere trin. Klienten foretager en procedureopkald på den lokale computer som sædvanligt. Modulet kaldet klientstub samler argumenter og opretter en meddelelse og videresender til operativsystemet, Operativsystem foretager et systemopkald og sender denne meddelelse til fjerncomputeren. Operativsystem på serveren indsamler meddelelsen og overføres til modulet på serveren kaldet serverstub. Derefter kalder serverstub proceduren på serveren. Endelig sendes resultater tilbage til klienten.
Fordelen ved at bruge RPC er, at den er uafhængig af netværksdetaljerne. Programmereren skal bare specificere på en abstrakt måde, mens operativsystemet passer på de interne netværksdetaljer. Så dette gør programmeringen lettere og lader RPC arbejde på tværs af ethvert netværk trods de fysiske forskelle og protokolforskelle. RPC-implementeringer er til stede i alle mainstream-operativsystemer som Unix, Linux, Windows og OS X. RPC er generelt sprogneutral, hvorfor det begrænser datatyperne til de mest primitive, da de skal være fælles for alle sprog. Fremgangsmåden i RPC er ikke objektorienteret, men det er en traditionel proceduremekanisme som i C.
RMI, der står for Remote Method Invocation, er en API (Application Programming Interface), der implementerer RPC i java for at understøtte objektorienteret karakter. Dette tillader opkald af Java-metoder på en anden Java Virtual-maskine, der er bosat på den samme computer eller en ekstern en. Begrænsningen af RMI er, at kun Java-metoder kan påberåbes, men dette kommer med fordelen, at objekter kan sendes som argumenter og returneringsværdier. Når ydelse betragtes som RMI er langsommere end RPC på grund af involvering af bytecode på Java Virtual-maskinen, men RMI er meget programmeringsvenlig, og det er meget let at bruge.
RMI bruger indbyggede sikkerhedsmekanismer i Java og giver også en socketfabrik, der muliggør brug af ikke-TCP tilpassede transportlagsprotokoller. Derudover tilbyder RMI metoder til at omgå firewalls. Trinene, der forekommer i RMI, ligner RPC. Implementeringen af RMI passer på de interne netværksdetaljer, hvor programmereren ikke behøver at bekymre sig om dem.
• RPC er sprogneutral, mens RMI er begrænset til Java.
• RPC er proceduremæssig som i C, men RMI er objektorienteret.
• RPC understøtter kun primitive datatyper, mens RMI tillader, at objekter sendes som argumenter og returneringsværdier. Ved brug af RPC skal programmerer opdele alle sammensatte objekter i primitive datatyper.
• RMI er let at programmere den RPC.
• RMI er langsommere end RPC, da RMI involverer udførelse af java-bytecode.
• RMI tillader brug af designmønstre på grund af den objektorienterede natur, mens RPC ikke har denne funktion.
Resumé:
RPC er en sprogneutral mekanisme, der tillader opkald til en procedure på en fjerncomputer. Den sprogneutrale funktion begrænser dog de datatyper, der videregives som argumenter og returnerer værdier til primitive typer. RMI er implementeringen af RPC i Java og det understøtter også objektforsendelse, hvilket gør programmeringslivet lettere. Fordelen ved RMI er den objektorienterede designstøtte, men begrænsning til Java er en ulempe.
Billeder høflighed: