221:
94:(IPC), in that different processes have different address spaces: if on the same host machine, they have distinct virtual address spaces, even though the physical address space is the same; while if they are on different hosts, the physical address space is different. Many different (often incompatible) technologies have been used to implement the concept.
110:
Remote procedure calls used in modern operating systems trace their roots back to the RC 4000 multiprogramming system, which used a request-response communication protocol for process synchronization. The idea of treating network operations as remote procedure calls goes back at least to the 1970s in
165:
to execute a specified procedure with supplied parameters. The remote server sends a response to the client, and the application continues its process. While the server is processing the call, the client is blocked (it waits until the server has finished processing before resuming execution), unless
86:
paradigm, RPCs are represented by remote method invocation (RMI). The RPC model implies a level of location transparency, namely that calling procedures are largely the same whether they are local or remote, but usually, they are not identical, so local calls can be distinguished from remote calls.
169:
An important difference between remote procedure calls and local calls is that remote calls can fail because of unpredictable network problems. Also, callers generally must deal with such failures without knowing whether the remote procedure was actually invoked. Idempotent procedures (those that
149:, an alternative model of remote method invocation (RMI) was widely implemented, such as in Common Object Request Broker Architecture (CORBA, 1991) and Java remote method invocation. RMIs, in turn, fell in popularity with the rise of the internet, particularly in the 2000s.
102:
Request–response protocols date to early distributed computing in the late 1960s, theoretical proposals of remote procedure calls as the model of network operations date to the 1970s, and practical implementations date to the early 1980s.
1019:
166:
the client sends an asynchronous request to the server, such as an XMLHttpRequest. There are many variations and subtleties in various implementations, resulting in a variety of different (incompatible) RPC protocols.
62:
explicitly writing the details for the remote interaction. That is, the programmer writes essentially the same code whether the subroutine is local to the executing program, or remote. This is a form of
170:
have no additional effects if called more than once) are easily handled, but enough difficulties remain that code to call remote procedures is often confined to carefully written low-level subsystems.
301:
Distributed Ruby (DRb) allows Ruby programs to communicate with each other on the same machine or over a network. DRb uses remote method invocation (RMI) to pass commands and data between processes.
307:
Elixir builds on top of the Erlang VM and allows process communication (Elixir/Erlang processes, not OS processes) of the same network out-of-the-box via Agents and message passing.
791:
856:
142:
under the name "Courier" in 1981. The first popular implementation of RPC on Unix was Sun's RPC (now called ONC RPC), used as the basis for
Network File System (NFS).
138:. Lupine automatically generated stubs, providing type-safe bindings, and used an efficient protocol for communication. One of the first business uses of RPC was by
411:
Windows
Communication Foundation is an application programming interface in the .NET framework for building connected, service-oriented applications.
119:
proposed
Distributed Processes, a language for distributed computing based on "external requests" consisting of procedure calls between processes.
323:
Remote
Function Call is the standard SAP interface for communication between SAP systems. RFC calls a function to be executed in a remote system.
310:
Google's Rust RPC framework Tarpc lets developers define the structure of messages using Rust's structs and traits, rather than using protobuf.
238:
182:
The client stub packs the parameters into a message and makes a system call to send the message. Packing the parameters is called marshalling.
1040:
691:
207:(IDL) to let various platforms call the RPC. The IDL files can then be used to generate code to interface between the client and servers.
833:
799:
436:
414:
Microsoft .NET Remoting offers RPC facilities for distributed systems implemented on the
Windows platform. It has been superseded by
465:
260:
803:
304:
Erlang is process oriented and natively supports distribution and RPCs via message passing between nodes and local processes alike.
445:
Apache Avro provides RPC where client and server exchange schemas in the connection handshake and code generation is not required.
415:
320:
Action
Message Format (AMF) allows Adobe Flex applications to communicate with back-ends or other applications that support AMF.
179:
The client calls the client stub. The call is a local procedure call, with parameters pushed on to the stack in the normal way.
131:
1050:
1035:
497:
380:
242:
204:
87:
Remote calls are usually orders of magnitude slower and less reliable than local calls, so distinguishing them is important.
502:
295:
603:
485:
491:
203:
To let different clients access servers, a number of standardized RPC systems have been created. Most of these use an
146:
91:
83:
853:
285:
282:
Java's Java Remote Method
Invocation (Java RMI) API provides similar functionality to standard Unix RPC methods.
194:
Finally, the server stub calls the server procedure. The reply traces the same steps in the reverse direction.
64:
231:
650:
433:
package includes an interface definition language used for its RPC protocols open sourced in 2015 as gRPC.
191:
The server stub unpacks the parameters from the message. Unpacking the parameters is called unmarshalling.
47:
31:
427:
The Open
Software Foundation DCE/RPC Distributed Computing Environment (also implemented by Microsoft).
76:
130:
between UNIX machines. This was soon followed by "Lupine" by Andrew
Birrell and Bruce Nelson in the
127:
655:
185:
The client's local operating system sends the message from the client machine to the server machine.
1045:
333:
770:
714:
668:
72:
68:
188:
The local operating system on the server machine passes the incoming packets to the server stub.
747:
722:
507:
480:
348:
SORCER provides the API and exertion-oriented language (EOL) for a federated method invocation
116:
762:
706:
660:
607:
532:
430:
104:
55:
43:
860:
386:
79:
894:
550:
17:
1029:
687:
460:
455:
123:
51:
774:
672:
718:
539:(PhD thesis). Xerox Palo Alto Research Center. PARC CSL-81-9 (Also CMU-CS-81-119).
442:
Google Web
Toolkit uses an asynchronous RPC to communicate to the server service.
1007:
1000:
993:
986:
220:
1022:— A developer's introduction to RPC and XDR, from SGI IRIX documentation.
288:
provides package rpc for implementing RPC, with support for asynchronous calls.
58:), which is written as if it were a normal (local) procedure call, without the
439:
combines RPC and Publish-Subscribe into a single, transport-agnostic protocol.
398:
provides remote procedure invocation through an intermediate layer called the
135:
59:
107:
is generally credited with coining the term "remote procedure call" in 1981.
1013:
635:
575:
710:
376:
is a successor of XML-RPC and also uses XML to encode its HTTP-based calls.
664:
854:
The A-Z of Programming Languages: Modula-3 - a-z of programming languages
405:
367:
361:
766:
1016:— A tutorial on ONC RPC by Dr Dave Marshall of Cardiff University
825:
422:
351:
339:
245: in this section. Unsourced material may be challenged and removed.
112:
957:
907:
612:
595:
873:
395:
139:
345:
D-Bus open source IPC program provides similar function to CORBA.
512:
475:
470:
373:
355:
1003:- Specifies version 2 of ONC RPC (second published RFC version)
989:- Specifies version 2 of ONC RPC (fourth published RFC version)
336:(Network File System) is one of the most prominent users of RPC
291:
Modula-3's network objects, which were the basis for Java's RMI
157:
RPC is a request–response protocol. An RPC is initiated by the
1010:- Specifies version 2 of ONC RPC (first published RFC version)
996:- Specifies version 2 of ONC RPC (third published RFC version)
214:
122:
One of the earliest practical implementations was in 1982 by
792:"1994 – Andrew Birrell, Bruce Nelson: Remote Procedure Call"
596:"A High-Level Framework for Network-Based Resource Sharing"
408:
provides a framework for creating RPC servers and clients.
636:"Distributed processes: a concurrent programming concept"
354:
is an RPC protocol that uses XML to encode its calls and
27:
Mechanism to allow software to execute a remote procedure
932:
908:"Protocol Buffers - Google's data interchange format"
364:
is an RPC protocol that uses JSON-encoded messages.
273:Notable RPC implementations and analogues include:
577:RC 4000 Computer Software: Multiprogramming System
370:is an RPC protocol that is inspired from JSON-RPC.
161:, which sends a request message to a known remote
494:(serialization format used by e.g. Microsoft RPC)
421:The Microsoft DCOM uses MSRPC which is based on
746:Birrell, Andrew D.; Nelson, Bruce Jay (1984).
686:Brownbridge, David R.; Marshall, Lindsay F.;
342:, by Sun Microsystems (also known as Sun RPC)
8:
830:Special Interest Group on Operating Systems
786:
784:
551:"Per Brinch Hansen • IEEE Computer Society"
933:"gRPC open-source universal RPC framework"
54:(commonly on another computer on a shared
863:. Computerworld. Retrieved on 2013-07-17.
654:
611:
261:Learn how and when to remove this message
389:framework for building network services.
524:
488:(serialization format used by e.g. NFS)
50:(subroutine) to execute in a different
897:. Monkey.org. Retrieved on 2013-07-17.
583:. Copenhagen, Denmark: Regnecentralen.
298:, with support for asynchronous calls.
748:"Implementing remote procedure calls"
392:Apache Thrift protocol and framework.
383:(Ice) distributed computing platform.
145:In the 1990s, with the popularity of
7:
755:ACM Transactions on Computer Systems
634:Brinch Hansen, Per (November 1978).
594:James E. White (December 23, 1975).
243:adding citations to reliable sources
834:Association for Computing Machinery
800:Association for Computing Machinery
431:Google Protocol Buffers (protobufs)
294:RPyC implements RPC mechanisms in
25:
699:Software: Practice and Experience
466:Local Inter-Process Communication
219:
1020:Introduction to RPC Programming
230:needs additional citations for
75:), typically implemented via a
796:Software System Award citation
498:Resource-oriented architecture
381:Internet Communications Engine
205:interface description language
1:
503:Distributed object middleware
1014:Remote Procedure Calls (RPC)
604:Augmentation Research Center
486:External Data Representation
1041:Inter-process communication
826:"SIGOPS Hall of Fame Award"
574:Brinch Hansen, Per (1969).
492:Network Data Representation
199:Standard contact mechanisms
147:object-oriented programming
92:inter-process communication
84:object-oriented programming
1067:
692:"The Newcastle Connection"
340:Open Network Computing RPC
643:Communications of the ACM
358:as a transport mechanism.
126:and colleagues for their
65:client–server interaction
962:Google project website
937:Google project website
912:Google project website
711:10.1002/spe.4380121206
18:Remote procedure calls
1051:Distributed computing
1036:Remote procedure call
665:10.1145/359642.359651
537:Remote Procedure Call
400:object request broker
36:remote procedure call
32:distributed computing
958:"Google Web Toolkit"
878:, Google, 2023-11-02
315:Application-specific
239:improve this article
128:Newcastle Connection
115:documents. In 1978,
895:libevent: Main Page
767:10.1145/2080.357392
98:History and origins
90:RPCs are a form of
859:2009-01-05 at the
174:Sequence of events
705:(12): 1147–1162.
508:Fragmented object
481:Remote evaluation
277:Language-specific
271:
270:
263:
117:Per Brinch Hansen
16:(Redirected from
1058:
973:
972:
970:
968:
954:
948:
947:
945:
943:
929:
923:
922:
920:
918:
904:
898:
892:
886:
885:
884:
883:
870:
864:
851:
845:
844:
842:
840:
822:
816:
815:
813:
811:
806:on April 2, 2012
802:. Archived from
788:
779:
778:
752:
743:
737:
736:
734:
733:
727:
721:. Archived from
696:
683:
677:
676:
658:
640:
631:
625:
624:
622:
620:
615:
613:10.17487/RFC0707
591:
585:
584:
582:
571:
565:
564:
562:
561:
555:www.computer.org
547:
541:
540:
533:Bruce Jay Nelson
529:
266:
259:
255:
252:
246:
223:
215:
105:Bruce Jay Nelson
77:request–response
56:computer network
44:computer program
21:
1066:
1065:
1061:
1060:
1059:
1057:
1056:
1055:
1026:
1025:
982:
977:
976:
966:
964:
956:
955:
951:
941:
939:
931:
930:
926:
916:
914:
906:
905:
901:
893:
889:
881:
879:
872:
871:
867:
861:Wayback Machine
852:
848:
838:
836:
824:
823:
819:
809:
807:
790:
789:
782:
750:
745:
744:
740:
731:
729:
725:
694:
685:
684:
680:
656:10.1.1.107.3108
649:(11): 934–941.
638:
633:
632:
628:
618:
616:
593:
592:
588:
580:
573:
572:
568:
559:
557:
549:
548:
544:
531:
530:
526:
521:
452:
330:
317:
279:
267:
256:
250:
247:
236:
224:
213:
201:
176:
155:
153:Message passing
134:environment at
100:
82:system. In the
80:message passing
28:
23:
22:
15:
12:
11:
5:
1064:
1062:
1054:
1053:
1048:
1043:
1038:
1028:
1027:
1024:
1023:
1017:
1011:
1004:
997:
990:
981:
980:External links
978:
975:
974:
949:
924:
899:
887:
865:
846:
817:
780:
738:
688:Randell, Brian
678:
626:
586:
566:
542:
523:
522:
520:
517:
516:
515:
510:
505:
500:
495:
489:
483:
478:
473:
468:
463:
458:
451:
448:
447:
446:
443:
440:
434:
428:
425:
419:
412:
409:
403:
393:
390:
384:
377:
371:
365:
359:
349:
346:
343:
337:
329:
326:
325:
324:
321:
316:
313:
312:
311:
308:
305:
302:
299:
292:
289:
283:
278:
275:
269:
268:
227:
225:
218:
212:
209:
200:
197:
196:
195:
192:
189:
186:
183:
180:
175:
172:
154:
151:
99:
96:
71:, executor is
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
1063:
1052:
1049:
1047:
1044:
1042:
1039:
1037:
1034:
1033:
1031:
1021:
1018:
1015:
1012:
1009:
1005:
1002:
998:
995:
991:
988:
984:
983:
979:
963:
959:
953:
950:
938:
934:
928:
925:
913:
909:
903:
900:
896:
891:
888:
877:
876:
869:
866:
862:
858:
855:
850:
847:
835:
831:
827:
821:
818:
805:
801:
797:
793:
787:
785:
781:
776:
772:
768:
764:
760:
756:
749:
742:
739:
728:on 2016-08-16
724:
720:
716:
712:
708:
704:
700:
693:
689:
682:
679:
674:
670:
666:
662:
657:
652:
648:
644:
637:
630:
627:
614:
609:
605:
601:
597:
590:
587:
579:
578:
570:
567:
556:
552:
546:
543:
538:
534:
528:
525:
518:
514:
511:
509:
506:
504:
501:
499:
496:
493:
490:
487:
484:
482:
479:
477:
474:
472:
469:
467:
464:
462:
461:Microsoft RPC
459:
457:
454:
453:
449:
444:
441:
438:
435:
432:
429:
426:
424:
420:
417:
413:
410:
407:
404:
401:
397:
394:
391:
388:
385:
382:
378:
375:
372:
369:
366:
363:
360:
357:
353:
350:
347:
344:
341:
338:
335:
332:
331:
327:
322:
319:
318:
314:
309:
306:
303:
300:
297:
293:
290:
287:
284:
281:
280:
276:
274:
265:
262:
254:
251:December 2013
244:
240:
234:
233:
228:This section
226:
222:
217:
216:
210:
208:
206:
198:
193:
190:
187:
184:
181:
178:
177:
173:
171:
167:
164:
160:
152:
150:
148:
143:
141:
137:
133:
129:
125:
124:Brian Randell
120:
118:
114:
108:
106:
97:
95:
93:
88:
85:
81:
78:
74:
70:
66:
61:
57:
53:
52:address space
49:
45:
41:
37:
33:
19:
965:. Retrieved
961:
952:
942:September 7,
940:. Retrieved
936:
927:
915:. Retrieved
911:
902:
890:
880:, retrieved
874:
868:
849:
837:. Retrieved
829:
820:
808:. Retrieved
804:the original
795:
758:
754:
741:
730:. Retrieved
723:the original
702:
698:
681:
646:
642:
629:
617:. Retrieved
599:
589:
576:
569:
558:. Retrieved
554:
545:
536:
535:(May 1981).
527:
399:
272:
257:
248:
237:Please help
232:verification
229:
202:
168:
162:
158:
156:
144:
121:
109:
101:
89:
42:) is when a
39:
35:
29:
967:November 1,
917:November 1,
67:(caller is
1046:Middleware
1030:Categories
882:2023-11-02
732:2016-08-16
560:2015-12-15
519:References
136:Xerox PARC
60:programmer
1006:RFC
999:RFC
992:RFC
985:RFC
761:: 39–59.
651:CiteSeerX
211:Analogues
48:procedure
46:causes a
857:Archived
839:July 11,
810:July 11,
775:11525846
690:(1982).
673:11610744
619:July 11,
450:See also
406:Libevent
379:ZeroC's
368:JSON-WSP
362:JSON-RPC
719:1840438
600:RFC 707
423:DCE/RPC
352:XML-RPC
328:General
113:ARPANET
773:
717:
671:
653:
296:Python
163:server
159:client
111:early
73:server
69:client
875:tarpc
771:S2CID
751:(PDF)
726:(PDF)
715:S2CID
695:(PDF)
669:S2CID
639:(PDF)
581:(PDF)
396:CORBA
140:Xerox
132:Cedar
1008:1050
1001:1057
994:1831
987:5531
969:2011
944:2016
919:2011
841:2011
812:2011
621:2011
513:gRPC
476:ODBC
471:HTTP
437:WAMP
387:Etch
374:SOAP
356:HTTP
34:, a
763:doi
707:doi
661:doi
608:doi
416:WCF
334:NFS
241:by
40:RPC
30:In
1032::
960:.
935:.
910:.
832:.
828:.
798:.
794:.
783:^
769:.
757:.
753:.
713:.
703:12
701:.
697:.
667:.
659:.
647:21
645:.
641:.
606:.
602:.
598:.
553:.
456:9P
286:Go
971:.
946:.
921:.
843:.
814:.
777:.
765::
759:2
735:.
709::
675:.
663::
623:.
610::
563:.
418:.
402:.
264:)
258:(
253:)
249:(
235:.
38:(
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.