RPCとRMIの違い
コンテンツ
RPCとRMIは、クライアントとサーバー間の通信を確立することにより、クライアントがサーバーからプロシージャまたはメソッドを呼び出すことを可能にするメカニズムです。 RPCとRMIの一般的な違いは、RPCがサポートするのは 手続き型プログラミング 一方、RMIは オブジェクト指向プログラミング.
2つのもう1つの大きな違いは、リモートプロシージャコールに渡されるパラメータが 通常のデータ構造。一方、リモートメソッドに渡されるパラメーターは、 オブジェクト.
- 比較表
- 定義
- 主な違い
- 結論
比較表
比較の根拠 | RPC | RMI |
---|---|---|
サポート | 手続き型プログラミング | オブジェクト指向プログラミング |
パラメーター | 通常のデータ構造は、リモートプロシージャに渡されます。 | オブジェクトはリモートメソッドに渡されます。 |
効率 | RMIより低い | RPCよりも多く、最新のプログラミング手法(つまり、オブジェクト指向のパラダイム)でサポートされています |
諸経費 | もっと | 比較的少ない |
入出力パラメーターは必須です。 | はい | 必ずしも |
プログラミングの容易さの提供 | 高い | 低い |
RPCの定義
リモートプロシージャコール(RPC) は、分散コンピューティング用に考案されたプログラミング言語機能であり、 現地手続き 呼び出します。これは、リモートサービスの最も一般的な形式であり、ネットワークを介して接続されたシステム間で使用するプロシージャコールメカニズムを抽象化する方法として設計されました。これは、オペレーティングシステムがプロセスに共有データの管理を許可し、異なるプロセスが別々のシステムで実行され、必然的にベースの通信を必要とする環境に対処するIPCメカニズムに似ています。
所定の手順でRPCがどのように実装されるかを理解しましょう。
- クライアントプロセスは、パラメータを使用してクライアントスタブを呼び出し、呼び出しが完了するまで実行を中断します。
- パラメータは、クライアントスタブを介してマーシャリングすることにより、マシンに依存しない形式に変換されます。次に、パラメータの表現を含むが準備されます。
- サイトのIDを見つけるために、クライアントスタブは、リモートプロシージャが存在するネームサーバーと相互通信します。
- クライアントスタブは、ブロッキングプロトコルを使用して、リモートプロシージャコールが存在するサイトにアクセスします。このステップは、応答を受け取るまでクライアントスタブを停止します。
- サーバーサイトは、クライアント側から送信されたものを受信し、マシン固有の形式に変換します。
- これで、サーバースタブはパラメーターとともにサーバープロシージャで呼び出しを実行し、サーバースタブはプロシージャが完了するまで中断されます。
- サーバープロシージャは生成された結果をサーバースタブに返し、結果はサーバースタブでマシンに依存しない形式に変換され、結果を含むを作成します。
- 結果はクライアントスタブに送信され、クライアントスタブに適したマシン固有の形式に変換されます。
- 最後のクライアントで、スタブはクライアントプロセスに結果を返します。
RMIの定義
リモートメソッド呼び出し(RMI) RPCに似ていますが、言語固有であり、javaの機能です。スレッドは、リモートオブジェクトのメソッドを呼び出すことができます。クライアント側とサーバー側の透過性を維持するために、スタブとスケルトンを使用してリモートオブジェクトを実装します。スタブはクライアントと共に存在し、リモートオブジェクトに対してはプロキシとして動作します。
クライアントがリモートメソッドを呼び出すと、リモートメソッドのスタブが呼び出されます。クライアントスタブは、メソッドの名前とマーシャリングされたパラメーターを含むパーセルの作成と実行に責任があり、スケルトンはパーセルの受信を担当します。
スケルトンはパラメーターを非整列化し、サーバー上で目的のメソッドを呼び出します。スケルトンは、指定された値(または例外)をパーセルでマーシャリングし、それをクライアントスタブに追加します。スタブは戻りパーセルを再構築し、クライアントに送ります。Javaでは、パラメーターはメソッドに渡され、参照の形式で返されます。すべてのオブジェクトがリモートメソッドであるとは限らないため、これはRMIサービスにとって面倒です。そのため、参照として渡すことができるものとできないものを決定する必要があります。
Javaは次の名前のプロセスを使用します 連載 ここで、オブジェクトは値として渡されます。リモートオブジェクトは、値渡しによってローカライズされます。また、スタブクラスのURLとともにオブジェクトへのリモート参照を渡すことにより、参照によってオブジェクトを渡すこともできます。参照渡しは、リモートオブジェクトのスタブを制限します。
- RPCは手続き型プログラミングパラダイムをサポートしているため、Cベースですが、RMIはオブジェクト指向プログラミングパラダイムをサポートし、Javaベースです。
- RPCのリモートプロシージャに渡されるパラメーターは、通常のデータ構造です。それどころか、RMIはリモートメソッドへのパラメーターとしてオブジェクトを通過させます。
- RPCはRMIの古いバージョンと見なすことができ、手続き型プログラミングをサポートするプログラミング言語で使用され、値渡し方法のみを使用できます。反対に、RMI機能は、値または参照によるパスを使用できる最新のプログラミングアプローチに基づいて考案されています。 RMIのもう1つの利点は、参照によって渡されるパラメーターを変更できることです。
- RPCプロトコルは、RMIよりも多くのオーバーヘッドを生成します。
- RPCで渡されるパラメーターは「インアウト」は、プロシージャに渡される値と出力値が同じデータ型でなければならないことを意味します。対照的に、「合格」の強制はありませんインアウトRMIのパラメーター。
- RPCでは、2つのプロセスに個別のアドレス空間があるため、参照が発生する可能性はありませんが、RMIの場合は可能です。
結論
RPCとRMIは同じ目的を果たしますが、異なるプログラミングパラダイムをサポートする言語で使用されるため、異なる機能があります。