1
  1. かつて、リモート プロキシの開発には stub/skeleton の生成が含まれていたことを理解していますが、今日ではリフレクションのおかげでこれは不要になりました。(動的プロキシ)

リフレクションがこの必要性に取って代わる理由と方法について、明確な説明が必要です。たとえば、スタブがネットワーク経由の通信を処理することになっていることを理解しました(リモートオブジェクトが別のコンピューター上にある場合)、さらにシリアライゼーション/デシリアライゼーションなどを担当しています...誰が今それを担当していますか?

多分私は動的プロキシの概念をすべて間違っていました。

  1. さらに、Java と Rmi に関するその主題について読みました。C++ でリモート プロキシを実装するにはどうすればよいでしょうか。おそらく DCOM を使用できます。別の、おそらくより簡単な方法はありますか? (そして、DCom または Java のようなスタブ/スケルトンはもう必要ありませんか?)

ありがとう

4

2 に答える 2

1

interface A、およびがあるとしclass B implements Aます。

サーバー VM には B のインスタンスが 1 つあります。名前に関連付けられています。サーバーはクライアント通信用の TCP ポートをリッスンします。このようなもの:

Server server = new Server(localhost, port);
server.bind("bbbb", new B() );

クライアント VM では、サーバー VM に存在する B オブジェクトにアクセスする必要があります。それへの(タイプAの)参照を取得する必要があります

A bb = lookup(serverIp, port, "bbbb");

bbAで作成された のサブクラスですjava.lang.reflect.Proxy。でのメソッド呼び出しbbは によって処理されInvocationHandler、呼び出しがいずれかの方法でエンコードされ、ネットワーク経由でサーバーに送信されます。サーバーは、「この名前のこのメソッドを [これらの引数で] bbbb という名前のオブジェクトで呼び出す」という要求を受け取り、サーバーはリフレクションを使用してそのタスクを問題なく実行します。次に、戻り値が同様の方法でクライアントに返されます。

ですから、これを自分で行うのは本当に難しいことではありません。Sun の RMI もおそらく同じことを行っています (RMI には、リモート ガベージ コレクションなどの他の機能があります)。http://java.sun.com/j2se/1.5.0/docs/guide/rmi/relnotes.htmlを参照してください。

于 2009-12-04T01:59:27.013 に答える
0

間違いでなければ、スタブ/スケルトンは rmic ツールによって静的に作成されましたが、現在はプロセス全体が動的です。

必ずしも「より良い」というわけではありませんが、スタブとスケルトンをコンパイルする手間が省けるだけです。どちらの場合も、リクエスト パラメータとレスポンスはほぼ同じレベルで同じ方法でシリアル化されます。

質問 1 については、RMI の一部の実装で Corba を使用しているため、コードが入手可能であれば、それを参照することをお勧めします。

必要なのは、スタブ/スケルトンが行ったように、C++ コードを Corba レイヤーとインターフェースすることだけです。

于 2009-12-11T20:56:21.777 に答える