「遠隔手続き呼出し」の版間の差分

削除された内容 追加された内容
Addbot (会話 | 投稿記録)
m ボット: 言語間リンク 23 件をウィキデータ上の d:q62270 に転記
CharHigh (会話 | 投稿記録)
m編集の要約なし
1行目:
{{otheruses|リモートプロシージャコール}}
{{IPstack}}
'''RPC'''({{lang-en-short|remote procedure call}}、リモートプロシージャコール)とは、[[プログラム (コンピュータ)|プログラム]]から別の[[アドレス空間]](通常、共有ネットワーク上の別のコンピュータ上)にある[[サブルーチン]]や[[プロシージャ|手続き]]を実行することを可能にする技術。'''遠隔手続呼出'''とも。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。つまり、プログラマはローカルなサブルーチン呼び出しと基本的に同じコードをリモート呼び出しについても行う。RPCを行うソフトウェアが[[オブジェクト指向プログラミング]]に基づく場合、RPC のことを '''リモート呼び出し'''({{lang|en|remote invocation}})あるいは '''リモートメソッド呼び出し''' ({{lang|en|remote method invocation}}、{{lang|en|RMI}})と呼ぶこともある([[Java Remote Method Invocation|Java RMI]]など)。
 
RPC には例えば、[[Open Network Computing Remote Procedure Call|ONC RPC]] [[DCE/RPC]] といった互いに非互換な様々な技術が存在する。
 
== 起源と歴史 ==
RPC の考え方は、少なくともRFC 707が発表された1976年まで遡る。最初に RPC を商用に実用化したのは[[ゼロックス]]の「{{lang|en|Courier}}」であり、1981年のことであった。[[UNIX]]で最初に広く使われるようになった RPC 実装は[[サン・マイクロシステムズ]]のRPC RPC(([[Open Network Computing Remote Procedure Call|ONC RPC]]) であり、[[Network File System|NFS]] の基盤として使われた。ONC RPC は現在でも広く使われている。
 
もう一つのUNIXでの初期の実装として、[[アポロコンピュータ]]の {{lang|en|Network Computing System}} (NCS) がある。NCS は後に [[Open Software Foundation|OSF]] {{lang|en|[[Distributed Computing Environment]]}} (DCE) で [[DCE/RPC]] の基盤として使われた。その約10年後、[[マイクロソフト]]が DCE/RPC を同社の RPC ([[DCE/RPC|MSRPC]]) の基盤として採用し、[[Distributed Component Object Model|DCOM]] の実装に使った。同じころ(1990年代中盤)、継承機構を備えた分散オブジェクトに関する RPC パラダイムとして、[[パロアルト研究所]]の [[Inter-Language Unification|ILU]] {{lang|en|[[Object Management Group]]}} [[Common Object Request Broker Architecture|CORBA]] が登場した。
 
== メッセージパッシング ==
RPCクライアントは、実行する手続きと引数とを要求メッセージとして既知のリモートサーバに送信することで、RPCを開始する。サーバーがRPCを処理している間、クライアント側はブロックされる。サーバー上でメッセージが処理され、応答がクライアントに戻ってくると、クライアント上のプロセスは処理を続行する。
 
RPC プロトコルの実装によって微妙な違いをもった多くのバリエーションがあり、それらの間には互換性がない。
 
RPCが通常のローカル呼び出しと比べて違う点で重要なのは、予測できないネットワーク上の問題で失敗することがあるという点である。またそのような場合、手続きが実際に実行されたかどうかをクライアントが知ることができないことがある。そういったケースでは、二重に手続きを実行しても影響のない場合は容易に対処できるが、そうでなければ適切な対処は困難である。そのため、注意深く記述された低レベルなサブシステムの制限下で呼び出しコードを実行するという方法がよくとられる。
 
=== 標準コンタクト機構 ===
各種クライアントからサーバへのアクセスを可能とするため、いくつかの標準 RPC システムが開発されてきた。それらの多くは[[インタフェース記述言語]] (IDL) を使って各種プラットフォーム間の RPC を可能としている。
 
IDL ファイルはクライアントとサーバ間のインタフェースのためのコードを生成するのに使われる。最も一般的なツールとしては [[RPCGEN]] がある。
 
== RPC に類似する概念 ==
* [[Java]] [[Java Remote Method Invocation|Java RMI]] API は、標準的 UNIX RPC とほぼ同等の機能を提供する。
* [[XML-RPC]] は、呼び出しを[[Extensible Markup Language|XML]]で符号化し、[[Hypertext Transfer Protocol|HTTP]] を通信プロトコルに使用する RPC プロトコルである。
* マイクロソフトの [[.NET Remoting]] は、Windows プラットフォーム上に実装された分散システムでの RPC 機能を提供するものである。
 
== 関連項目 ==