web-dev-qa-db-ja.com

SocketとRPCの違いは何ですか?

ソケットとRPC(リモートプロシージャコール)の実際の違いは何ですか?

私の理解では、両方の機能は クライアントサーバーモデル に基づいています。また、どの条件でどれを使用する必要がありますか?

PS:読み取り中に混乱が発生する ガルビンによるオペレーティングシステムの概念

14
roottraveller

短い答え:

RPCはプロトコルです。ソケットは、そのプロトコルを実装するためのトランスポートへのアクセスを提供します。

RPCは、オペレーティングシステムが提供するサービスおよびプロトコルであり、リモートアプリケーションで実行するためにコードをトリガーできます。これには、ネットワークを介して別のデバイスがプロシージャまたはオブジェクトにアクセスできる定義済みプロトコルがあります。 RPCの実装は、基本的に任意のネットワークトランスポート(たとえば、TCP、UDP、文字列を含むカップ)で実行できます。

ソケットは、アプリケーションが特定のネットワークトランスポートを介して別のデバイスとデータを送受信できるようにするための単なるプログラミングの抽象化です。ソケットを使用してトランスポート(TCPなど)の上にプロトコル(RPCなど)を実装します。

11
selbie

これはオペレーティングシステム固有です。 オペレーティングシステム:Three Easy Pieces (無料でダウンロード可能)のような優れたOSの本を最初に読んでください。

ネットワークソケット は、プロセス間通信(特に異なるマシン間)を行う方法です。 Berkeley sockets APIについてもお読みください。 socket(7) Linuxの場合。

リモートプロシージャコール はプログラミング手法です(多くの場合、Linuxでは socket(2) システムコールを使用します)。すべてのRPC要求は、正確に1つの応答を予期し、ソフトウェアによって開始されます。

多くの場合、ソケットはasynchronousメッセージにも使用されます(たとえば、 X11 プロトコル stack 、- WebSocket s、 [〜#〜] smtp [〜#〜] )。 メッセージの受け渡し はプログラミングのパラダイム(RPCよりも一般的)であり、応答を期待せずに頻繁に送信されます。たとえば、X11サーバーは、キーを押すたびにキーボードイベントメッセージを送信します。

(つまり、いくつかの点で、リンゴとオレンジを比較しています)

Linuxの場合、 Advanced Linux Programming (無料でダウンロード可能)を読むことをお勧めします。

PS:Galvinによるオペレーティングシステムの概念を読んでいるときに混乱が生じます

それがあなたの問題です。

リモートプロシージャコール(RPC)は、ネットワーク通信の高レベルモデルです。多数のRPCプロトコルが存在します。 RPCモデルでは、基になる実装が各リモートプロシージャのスタブを作成します。アプリケーションが「リモートプロシージャ」を呼び出すと、スタブはパラメータをパックし、次の作業でそれらを送信し、プロシージャのリモートバージョンを呼び出して、戻り値を取得し、ネットワークを介して呼び出し側に送り返します。戻り値とアプリケーションはそれらを受け取ります。

RPCモデルは1980年代後半に流行になりました。アイデアは、関数が実際に実行された場所(プロセス、別のプロセス、別のコンピューター)で透過的であるということでした。この概念は、1990年代初頭に分散オブジェクト(DCOM、CORBAなど)に拡大しました。

残念ながら、実際のアプリケーションでは、遅延とエラー処理のためにプロシージャがリモートで実行されているかどうかを本当に知る必要がありました。

RPC実装のどこかで、ネットワークインターフェイスが呼び出されます。

ソケットは、このようなネットワークインターフェイスです。これらは唯一のプログラミングインターフェイスではありませんが、E官システムで最も一般的です。

したがって、RPC [〜#〜] might [〜#〜]はソケットを使用して実装されます。

1
user3344003