Panggilan tatacara jauh

**Panggilan Tatacara Jauh**  (Remote Procedure Call-RPC") merupakan komunikasi interproses yang membenarkan atur cara komputer untuk menyebabkan subrutin atau tatacara untuk dilaksanakan di ruang alamat lain (biasanya pada komputer lain di rangkaian kongsi) tanpa pengaturcara mengkod perincian secara jelas bagi interaksi jauh ini.    
Ini adalah, pengaturcara pada asasnya menulis kod yang sama samaada subrutin tempatan kepada aturcara yang dilaksanakan, atau jauh. Apabila aturcara tersebut menggunakan princip berorientasi objek, RPC dikenali sebagai **seru jauh** atau **seru kaedah jauh**.

Perhatikan bahawa terdapat banyak teknologi (sering kali tidak serasi) biasanya digunakan bagi melakukan ini.

## Sejarah dan asal
Idea bagi Panggil Tatacara Jauh ("RPC-Remote Procedure Call") wujud seawal 1976, apabila ia digambarkan dalam RFC 707. Salah seorang pengguna perniagaan bagi RPC adalah oleh Xerox di bawah nama "Courier" pada tahun 1981. Perlaksanaan pertama popular bagi RPC adalah pada Unix merupakan RPC Sun (kini dikenali sebagai ONC RPC), digunakan sebagai asas bagi Sistem Fail Rangkaian ("Network File System-NFS")  (Sun).

Satu lagi perlaksanaan awal Unix adalah Sistem Pengkomputan Rangkaian ("Network Computing System-NCS") *Apollo Computer*.  NCS kemudian digunakn sebagai asas bagi DCE/RPC dalam Persekitaran Pengkomputan Teragih ("Distributed Computing Environment-DCE") OSF. Satu dekad kemudian Microsoft menerima pakai DCE/RPC sebagai asas mekanisma Microsoft RPC (MSRPC), dan melaksanakan Model Objek Komponen Teragih ("Distributed Component Object Model-DCOM") di atasnya. Sekitar masa yang sama (pertengahan-90-an),  ILU Xerox PARC, dan Kumpulan pentadbir Objek ("Object Management Group - CORBA"), menawarkan paradigm RPC lain berasaskan objek teragih dengan mekanisma diwarisi.

## Hulur perutusan
RPC dimulakan oleh *pelanggan*, yang menghantar perutusan permohonan kepada *pelayan* asing bagi melaksanakan tatacara tertentu dengan parameter diberikan. Pelayan jauh menghantar balasan kepada pelanggan, dan applikasi meneruskan prosesnya. Terdapat banyak variasi dan halusi dalam pelbagai perlaksanaan, menghasilkan pelbagai jenis protokol RPC tidak serasi. Ketika pelayan memproses panggilan, pelanggan disekat (ia menunggu sehingga pelayan habis memproses sebelum meneruskan perlaksanaan).

Perbezaan penting antara panggilan tatacara jauh dan panggilan tempatan adalah panggilan jauh boleh gagal disebabkan masalah rangkaian tidak boleh dijangkakan. Juga pemanggil pada umumnya perlu menangani kegagalan tersebut tanpa mengetahui samaada tatacara jauh tersebut sebenarnya dimulakan. Tatacara Idempoten (yang tidak mempunyai kesan tambahan jika ia dilaksana lebih dari sekali) dapat dikendali dengan mudah, tetapi masih cukup sukar untuk memulakan tatacara jauh yang sering terhad kepada sistem kecil tahap rendah yang ditulis dengan teliti.

### Langkah dalam menghasilkan RPC

# Pelanggan memanggil putung Pelanggan ("Client[Stub"). Panggilan ini merupakan panggilan tatacara tempatan, dengan parameter ditolak pada stak dalam cara yang biasa.
# Putung Pelanggan ("client stub") membungkus parameter kedalam perutusan dan membuat panggilan sistem bagi menghantar perutusan. Memasukkan parameter dikenali sebagai mengatur ("marshaling").
# Kernel menghantar perutusan dari mesin pelanggan kepada mesin pelayan.
# Kernel menghantar paket masuk kepada putung pelayan ("server stub")/ kerangka kelas ("Class skeleton").
# Akhirnya, putung pelayan memulakan tatacara pelayan. Jawapan menjejak cara yang sama ke arah sebaliknya.

### Mekanisma hubung piwaian
Untuk membenarkan pelanggan berlainan mencapai pelayan, sejumlah piwaian sistem RPC telah dicipta, Kebanyakannya menggunakan bahasa deskripsi antaramuka ("interface description language-IDL") untuk membenarkan pelantar berbeza memangil RPC. File IDL kemudian boleh digunakan bagi menjana kod sebagai antaramuka antara pelanggan dan pelayan. Peralatan biasa digunakan bagi tujuan ini adalah RPCGEN.

## Seumpama RPC lain
Seumpama RPC yang lain:
* Java Remote Method Invocation (Java RMI) API provides similar functionality to standard UNIX RPC methods. 
* Modula-3's Network Objects, which were the basis for Java's RMI
* XML-RPC is an RPC protocol that uses XML to encode its calls and HTTP as a transport mechanism.
* Microsoft .NET Remoting offers RPC facilities for distributed systems implemented on the Windows platform.
* RPyC implements RPC mechanisms in Python, with support for asynchronous calls.
* Pyro Object Oriented form of RPC for Python.
* Etch (protocol) framework for building network services.
* Facebook's Thrift protocol and framework.
* CORBA provides remote procedure invocation through an intermediate layer called the "Object Request Broker"
* 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.
* AMF allows Flex applications to communicate with back-ends or other applications that support AMF.
* Libevent provides a framework for creating RPC servers and clients.

## Jaringan

## Lihat juga
* Panggil Tatacara Tempatan ("Local Procedure Call")
* Protokol SOAP
* HTTP
* ODBC
* Panggilan fungsi jauh ("Remote function call")
* Perwakilan Data Luar ("External Data Representation")

## Rujukan

Bruce Jay Nelson, Remote Procedure Call, PARC CSL-81-9 (Also CMU-CS-81-119), Xerox Palo Alto Research Center, Palo Alto, CA 94306, May 1981, other keywords: IPC, interprocess communication, Emissary, RPC, PhD thesis.

## Pautan luar
*RFC 1057 - Specifies version 1 of ONC RPC
*RFC 5531 - Specifies version 2 of ONC RPC
*Remote Procedure Calls (RPC) &mdash; A tutorial on ONC RPC by Dr Dave Marshall of Cardiff University
*Introduction to RPC Programming &mdash; A developer's introduction to RPC and XDR, from SGI IRIX documentation.
*iTube App