1.何
RPC:リモートプロシージャコール
二、なぜ
基礎となる詳細をシールドし、システムが実装の詳細ではなくビジネスロジックに集中できるようにする
三、方法
-
シリアライゼーションとデシリアライゼーション:まず、ネットワーク送信を行うには、オブジェクトをバイトストリームにシリアライズする必要があります。
解決策1:xml、json、その他のテキストプロトコルなどの自己記述型。
解決策2:パフォーマンスが向上したシリアル化プロトコル。通信コンテンツはドライグッズです。テキストプロトコルとは異なり、xmlタグなど、他の多くの干渉や不純な情報があります。
シリアライゼーションプロトコルの設計、考慮事項:分析効率、圧縮率、伝送効率、スケーラビリティ、互換性、読みやすさ、デバッグ可能性、クロス言語、
一般的に使用されるユニバーサルシリアライゼーションメソッド(プロトコル):xml / json、 protobuf、avro、CORBA、mc_pack -
クライアント側の
同期RPC:
a。ビジネスコードの例:Result = Add(Obj1、Obj2); // Beは結果を取得する前にブロッキング状態
ですb。コアコンポーネント:シリアル化コンポーネント、接続プールコンポーネント
c。論理ビュー:
非同期RPC:
a。ビジネスコードの例:Add(Obj1、Obj2、callback); //呼び出しの直後に戻り、結果を待たずに、結果が得られた後でこのコールバック関数を呼び出します。
b。コアコンポーネント:シリアル化コンポーネント、接続プールコンポーネント、コンテキストマネージャー、ダウンストリーム送信キューと受信キュー、ダウンストリーム送信スレッドと受信スレッド、タイムアウトマネージャー
c。論理ビュー:
d。非同期アーキテクチャーなぜコンテキストマネージャーが必要なのですか?リクエスト-レスポンス-コールバック情報を一致させる方法は?答えは、要求時にRPCサーバーにIDを送信し、RPCサーバーが応答したときにIDを送信することです。
e。非同期アーキテクチャー、なぜタイムアウト・マネージャーが必要なのですか?答えは、タイムアウトに応答していない要求を削除します。そうしないと、要求キューがバーストします。 -
サーバー側
サーバー側は比較的単純です。つまり、シリアル化された情報を逆シリアル化のために受け入れ、結果を処理してシリアル化し、シリアル化された結果をクライアントに返します。