rpcおよびphpで使用されるrpc

4330 ワード

  • ディレクトリ
  • rpc関連知識準備
  • リモートコール原理
  • 2リモートコールとSocket Restの違い
  • 流行のrpcフレームワーク
  • 1 phprpc例
  • 2 yarインスタンス


  • 目次
    1.rpcに関する知識準備
    rpcのフルネームはremote procedure callで、翻訳するとリモートプロシージャ呼び出しです
    リモートコールとは、プログラム呼び出しのメソッド実装がプログラムが存在するローカルではなく、リモートのどこかにあることを意味します.リモートコールの利点は、デカップリングです.【serverがメソッド内の修正を必要とする場合、clientは変更する必要がなく、変更する必要はありません.この方法は部門をまたいで、会社をまたいで協力するときによく使われ、メソッドの提供者は一般的に「サービスの暴露」と呼ばれています.
    1.1リモートコールの原理
    例えば、A(client)呼び出しB(server)が提供するremoteAddメソッド:
  • まずAとBの間にTCP接続を確立する.
  • そして、Aは、呼び出す必要があるメソッド名(ここではremoteAdd)およびメソッドパラメータ(10,20)をバイトストリームにシーケンス化して送信する.
  • Bは、Aから送信されたバイトストリームを受信し、ターゲットメソッド名、メソッドパラメータを逆シーケンス化し、対応するメソッド呼び出し(localAddかもしれない)を実行し、結果30を返す.
  • Aはリモートコール結果を受け取り、30を出力する.

  • RPCフレームワークは、私がさっき言ったこれらの細部をカプセル化し、ユーザーに簡単で友好的なAPIの使用を暴露することです.
    1.2リモートコールとSocket Restの違い
    RPC、Socket、Restはクライアント/serverモード
  • とSocketの違いは何ですか?socketはRPCがよく採用する通信手段の一つであり、RPCはSocketに基づいて実現され、socketよりも多くのネットワークとシステムリソースが必要である.RPCにはSocketに加えて、http、オペレーティングシステムに付属するパイプなどの技術があり、リモートプログラムの呼び出しを実現しています.2.Restとどんな違いがありますか.REST APIはHTTPプロトコルに基づいており、RESTはhttpプロトコルにおけるPOST/GET/PUT/DELETEなどの方法と可読性の強いURLを通じてhttpリクエストを提供することに力を入れている.RPCはHTTPプロトコルに基づいていなくてもよいので、バックエンドの2つの言語が互いに呼び出されれば、RPCでより良い性能(HTTPヘッダなどの一連のものを省く)を得ることができ、構成も容易になるはずです.

  • 2.ポピュラーなrpcフレームワーク
    phprpc,yar, thrift, gRPC, swoole, hprose
    2.1 phprpc例
    まず簡単な例を示しますが、phprpcもサーバ側とクライアントに分かれています.フォルダにはphprpcが対応していますserver.phpとphprpc_client.php
    phprpc_client.php
    
    include ("phprpc/phprpc_client.php");
    $client = new PHPRPC_Client('http://127.0.0.1/server.php');
    echo $client->HelloWorld();

    phprpc_server.php
    
    include ("phprpc/phprpc_server.php");
    function HelloWorld() {
        return 'Hello World!';
    }
    $server = new PHPRPC_Server();
    $server->add('HelloWorld');
    $server->start();

    2.2 yar例
    まず簡単な例を挙げますが、yarもサーバ側とクライアントに分かれています.フォルダにはyar_が対応していますserver.phpとyar_client.php
    yar_client.php
    
    $client = new Yar_Client("http://127.0.0.1/yar_server.php");
    echo $client->api('helo word');

    yar_server.php
    
    class API {
        public function api($parameter, $option = "foo") {
            return $parameter;
        }
        protected function client_can_not_see() {
        }
    }
    $service = new Yar_Server(new API());
    $service->handle();