Knowledge

Remote procedure call

Source đź“ť

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:)

Index

Remote procedure calls
distributed computing
computer program
procedure
address space
computer network
programmer
client–server interaction
client
server
request–response
message passing
object-oriented programming
inter-process communication
Bruce Jay Nelson
ARPANET
Per Brinch Hansen
Brian Randell
Newcastle Connection
Cedar
Xerox PARC
Xerox
object-oriented programming
interface description language

verification
improve this article
adding citations to reliable sources
Learn how and when to remove this message
Go

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑