0

編集:私の元のタイトルは「RPCでのスタブの使用」でした。タイトルを編集して、それがその質問以上のものであることを他の人に知らせました.

SOAP ベースのサービスの開発を開始しましたが、スタブの役割を理解できません。ウィキを引用するには:

クライアントとサーバーは異なるアドレス空間を使用するため、関数呼び出しで使用されるパラメーターの変換を実行する必要があります。そうしないと、コンピューターのメモリへのポインターが各マシンの異なるデータを指すため、これらのパラメーターの値を使用できません。クライアントとサーバーは、単純なパラメーターでも異なるデータ表現を使用する場合があります (たとえば、整数の場合はビッグ エンディアンとリトルエンディアン)。スタブはパラメーターの変換を実行するために使用されるため、リモート関数呼び出しはローカル関数呼び出しのように見えます。リモートコンピュータ用。

これはばかげていますが、これを「実質的に」理解していません。Java でソケット プログラミングを行ったことがありますが、TCP/UDP クライアントがサーバーと対話するときの「パラメーターの変換」の手順を覚えていません。(TCP/UDP ソケットを使用した生のサーバーとクライアントの通信は RPC の下にあると思います)

RESTful サービス開発の経験はありますが、REST のスタブ アナログも認識できません。誰か助けてくれませんか?

4

1 に答える 1

2

ネットワーク(SOAP、REST、CORBA、DCOM、JSON-RPCなど)を介した呼び出しのスタブは、次のような基本的な詳細をすべて処理するラッパー関数を提供する単なるヘルパークラスです。

  • TCP /UDP/その他のトランスポート層の初期化
  • 呼び出す適切なアドレスを見つけ、必要に応じてDNSルックアップを実行する
  • サーバーがあるべきネットワークエンドポイントに接続する
  • サーバーがリッスンしていない場合のエラーの処理
  • サーバーが期待どおりであることを確認する(セキュリティチェック、バージョン管理など)
  • エンコーディングフォーマットのネゴシエーション
  • ネットワーク上での送信に適した形式(CDR、NDR、JSON、XMLなど)での要求パラメーターのエンコード(または「マーシャリング」)
  • エンコードされたリクエストパラメータをネットワーク経由で送信し、必要に応じてチャンクまたはフロー制御を処理します
  • サーバーからの応答の受信
  • 応答の詳細のデコード(または「アンマーシャリング」)
  • 元の呼び出しコードへの応答を返す(または問題が発生した場合はエラーをスローする)

「生の」TCP通信のようなものはありません。要求/応答モデルでそれを使用していて、TCP接続を介して送信されるデータから何らかの意味を推測する場合は、そこに何らかの形式の「パラメーター」をエンコードしています。あなたはたまたま、スタブが通常提供するものを自分で構築しました。

スタブは、リモート呼び出しをローカルのインプロセス呼び出しのように見せようとしますが、正直なところ、それは本当に悪いことです。それらはまったく同じではなく、アプリケーションによって異なる方法で検討する必要があります。

于 2012-08-23T20:53:27.247 に答える