Java RMIとRPCの違いは何ですか?


163

Java RMIとRPCの実際の違いは何ですか?

RMIがオブジェクトを使用することをいくつかの場所で読みましたか?


RMIJavaはgRPC.Netのようなものだと思います...
Yousha Aleayoub

回答:


137

RPCはCベースであり、構造化プログラミングのセマンティクスを備えているため、RMIはJavaベースのテクノロジーであり、オブジェクト指向です。

RPCを使用すると、サーバーにエクスポートされたリモート関数を呼び出すだけで済みます。RMIでは、リモートオブジェクトへの参照を作成してそのメソッドを呼び出すことができます。また、多くのJVMインスタンスに分散できるリモートオブジェクト参照を渡して返すことができるため、はるかに強力です。 。

RMIは、純粋なクライアント/サーバーアーキテクチャよりも複雑なものを開発する必要が生じたときに際立ちます。個々の接続を明示的に確立する必要なく、すべてのクライアントが通信できるように、ネットワーク上にオブジェクトを分散するのは非常に簡単です。


19
これは誤りです。RPCもJavaベースです。JAX-RPC 1.1は2.0に置き換えられ、2.0はJAX-WSに名前が変更されました。Javaでは、RPCについて話すとき、SOAPとWebサービスについて話しています。これは、JAX-RPC 1.1がJAX-WSに変更されたことに関するIBMの記事です。ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC、2015

1
@MattCあなたがリンクした記事は、この名前が「JAX-RPC」から「JAX-WS」に変更された理由は、この仕様が単に「RPC」以上のものを含んでいたため、元の名前が正確ではなかったということを指摘したと思います伝統的な意味で。したがって、RPCの伝統的な意味について述べているこの答えは、まだ正しいです。
xji

2
ええ、私が意味したことは、RPCはC / Unixの世界(少なくとも最も一般的なRPC実装、ONCRPC)で生まれたものであり、そのため、その計算モデルに基づいてモデル化されています。もちろん、他のプログラミング言語の上にそれを実装することを妨げるものは何もありません
Fortran

6
セマンティクスの使用方法に関する意見の少しの違いは、答えを間違った(または誤解を招く)にはなりません。これを読んだ人なら誰でも、「Cベース」は基本的に「手順指向」を意味することを簡単に理解できます。Javaを学んだ人なら、POPとOOPの違いを知っています。
Navin Israni 2017年

nodejsクライアントは(たとえば)サーバーでRMI呼び出しを呼び出すことができますか?そのような方法はありますか?
Hitesh Bajaj

45

RPCとRMIの主な違いは、RMIにはオブジェクトが含まれることです。プロキシ関数を使用してプロシージャをリモートで呼び出す代わりに、プロキシオブジェクトを使用します

RMIの透過性は高くなります。つまり、テクノロジーが言語に統合されているため、オブジェクト、参照、継承、ポリモーフィズム、および例外の悪用によるものです。

RMIはRPCよりも高度であり、実行時にインターフェイスを変更できる動的な呼び出しと、抽象化の追加レイヤーを提供するオブジェクトの適応が可能です。


18

1.アプローチ:

RMIは、ユーザーが呼び出す必要のあるオブジェクトとオブジェクトのメソッドをユーザーが知る必要があるオブジェクト指向のパラダイムを使用します。

RPCはオブジェクトを扱いません。むしろ、すでに確立されている特定のサブルーチンを呼び出します。

2.働く:

RPCを使用すると、ローカルコールによく似たプロシージャコールを取得できます。RPCは、ローカルコンピューターからリモートコンピューターへの呼び出しの受け渡しに伴う複雑さを処理します。

RMIもまったく同じことを行いますが、RMIはオブジェクトと呼び出されているメソッドへの参照を渡します。

RMI = RPC +オブジェクト指向

3.より良いもの:

RMIはRPCに比べて優れたアプローチであり、特に大規模なプログラムでは、問題が発生したかどうかを簡単に識別できるコードが提供されるため、RMIの方が優れています。

4.システム例:

RPCシステム: SUN RPC、DCE RPC

RMIシステム: Java RMI、CORBA、Microsoft DCOM / COM +、SOAP(Simple Object Access Protocol)


私のアプリケーションでは、JAX-WSを使用してSOAPサービスを公開/消費しています。RPCタイプのメカニズムと呼べますか?私の理解によれば、JAX-WSでは、JavaリフレクションAPIを使用してリモートメソッドを呼び出しています。したがって、RPCの定義との一致です。確認してください!
Gunjan Shah

11

リモートプロシージャコール(RPC)は、ローカルマシンまたはリモートマシンにある別のプロセスの関数を呼び出すことができるプロセス間通信です。

リモートメソッド呼び出し(RMI)は、オブジェクト指向パラダイムをサポートするRPCをJavaに実装するAPIです。

  1. RPCの呼び出しは、Cプロシージャを呼び出すようなものと考えることができます。RPCはプリミティブデータ型をサポートし、RMIはメソッドパラメータ/戻り型をJavaオブジェクトとしてサポートします。

  2. RMIは、RPCとは異なり、プログラミングが簡単です。一連のプリミティブデータ型ではなく、オブジェクトの観点からビジネスロジックを考えることができます。

  3. RPCは、Javaに限定されているRMIとは異なり、言語に依存しません。

  4. RMIはRPCより少し遅い

CでのRPC実装については、この記事をご覧ください。


6

クライアントがサーバーへのプロキシオブジェクト(またはスタブ)を送信し、両方の点で、RMIまたはリモートメソッドInvokationは、RPCまたはリモートプロシージャコールと非常によく似ていますが、微妙な違いは、クライアント側のRPC呼び出すのある機能プロキシ機能を通って、RMIは、呼び出すメソッドを 経由プロキシ機能。RMIは RPCのオブジェクト指向バージョンであるため、やや優れています

ここから。

詳細と例については、こちらをご覧ください


5
methodはjavaで呼び出される関数で、functionはc / c ++で呼び出されるメソッドです。それでも違いは何ですか?
スターコーン

1
違いは、(インスタンスメソッドの場合)呼び出し元のオブジェクトがあることです。呼び出し元のオブジェクトは、(そのコードと共に)送信する必要があるか、削除サーバーに存在する必要がありますが、ローカルサーバーで参照する方法があります。
Ellen Spertus、2012

特定のプログラミング言語がメソッドと関数をどのように扱うかを無視すると、文学的意味は、関数が値を返すのに対してメソッドは状態を変更するということです。
Dan

RPCはプロキシ関数を介してFUNCTIONSを呼び出し、RMIはプロキシOBJECTを使用してMETHODSを呼び出します。正しい?
Noor Nawaz、2015

クライアントは通常、「サーバーにプロキシオブジェクト(またはスタブ)を送信しません」。質の悪い引用。
ローン侯爵

6

RPCとRMIの本当の違いは、RMIに関係するオブジェクトがあることです。プロキシ関数を介して関数を呼び出す代わりに、プロキシを介してメソッドを呼び出します。


6

RMIとRPCの違いは次のとおりです。

  • 名前としてのRMIは、リモートメソッド呼び出しを示します。これは、メソッドまたはオブジェクトを呼び出します。そして
  • RPCは関数を呼び出します。

2
a methodとaの間で暗黙的に強調しているが明確にしていない違いは何functionですか?Javaでは何も機能はありません...しかし、OOPに限り私が覚えてて、彼らは同義語であり、そしてそうしているinvocationcall

RPCはプロシージャ/関数を呼び出します-フラットアウト。
foo

3

RPCは、Cに基づく古いプロトコルです。リモートプロシージャを呼び出して、ローカルコールのように見せることができます。RPCは、リモート呼び出しをサーバーに渡し、クライアントに結果を取得するという複雑さを処理します。

Java RMIも同じことを実現しますが、少し異なります。リモートオブジェクトへの参照を使用します。つまり、リモートオブジェクトへの参照を、呼び出すメソッドの名前とともに送信するということです。大規模なプログラムの場合のコードとネットワーク経由でのオブジェクトの分散により、各接続を個別に確立する代わりに、複数のクライアントがサーバーのメソッドを呼び出すことができます。


具体的には、どのプロトコルが「RPC」ですか。私の知る限り、RPCには20のプロトコルがあり、その半分はJavaで利用できます。
fooの

@foo彼がSun-RPCを参照していることは間違いありませんが、すべてのRPCはリモートプロシージャコール、nOオブジェクト、またはメソッドを意味するため、実際には関係ありません。
ローン侯爵
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.