ホームページ > バックエンド開発 > PHPチュートリアル > 人気のrpcフレームワークをphpで詳しく解説

人気のrpcフレームワークをphpで詳しく解説

小云云
リリース: 2023-03-21 17:34:02
オリジナル
17129 人が閲覧しました

RPC フレームワークとは何ですか? RPC を「リモート プロシージャ コール」という一文で要約できる場合、リモート コールとは何でしょうか?通常、次の関数メソッド localAdd(10, 20) などの PHP のメソッドを呼び出します。 localAdd メソッドの特定の実装は、ユーザーによって定義されるか、PHP ライブラリ関数、つまり localAdd メソッドに付属します。コードはローカルに実装されており、ローカル呼び出しです。リモート呼び出しとは、呼び出されるメソッドの特定の実装が、プログラムが実行されている場所ではなく、他のリモートの場所にあることを意味します。

リモート呼び出しの原理

たとえば、A (クライアント) は、B (サーバー) によって提供される RemoteAdd メソッドを呼び出します。呼び出す必要があるメソッドの名前 (ここでは、remoteAdd) とメソッドのパラメーター (10、20) をバイト ストリームにシリアル化して送信します。

  1. B は、A によって送信されたバイト ストリームを受け入れ、それを逆シリアル化して取得します。ターゲットのメソッド名とメソッドのパラメータを取得し、対応するメソッド呼び出し (おそらく localAdd) を実行し、結果 30 を返します。

  2. A はリモート呼び出しの結果を受け入れ、30 を出力します。

  3. RPC フレームワークは、先ほど述べた詳細をカプセル化し、ユーザーにシンプルでフレンドリーな API の使用を提供します。

  4. リモート呼び出しの利点
  5. 分離: サーバーがメソッドを変更する必要がある場合、クライアントはまったく意識せず、変更を加える必要がありません。このメソッドは部門間および会社間の協力でよく使用されます。メソッド 通常呼ばれるプロバイダー: 公開されるサービス。

  6. RPC とソケットの違いは何ですか?

上記の簡単な説明を通して、RPC と Socket は似ているように見えます。これらはすべてリモート メソッドを呼び出し、すべてクライアント/サーバー モードです。私も以前に記事を書きました: では、それらの違いは何ですか?

RPC (リモート プロシージャ コール) はクライアント/サーバー モードを使用します。両方のプロセスを実装すると、相互に通信します。ソケットは、RPC でよく使用される通信方式の 1 つです。RPC はソケットに基づいて実装されており、ソケットよりも多くのネットワーク リソースとシステム リソースを必要とします。 RPC には、Socket に加えて、http、オペレーティング システム独自のパイプライン、リモート プログラムへの呼び出しを実装するその他のテクノロジなど、他の通信方法もあります。 Microsoft の Windows システムでは、RPC は通信に名前付きパイプを使用します。

RPC と REST の違いは何ですか?

RPC を理解すると、RPC はクライアント/サーバー モードであり、リモート メソッドを呼び出します。REST も、よく知られている API 呼び出しプロトコル メソッドのセットであり、クライアント/サーバー モードに基づいており、リモート メソッドを呼び出します。では、それらの違いは何でしょうか?

REST API と RPC はどちらもサーバー側のインターフェイスに関数をカプセル化し、クライアントによる呼び出しに対して公開します。ただし、REST API は http で POST/GET/PUT/ を渡すことに基づいています。 DELETE およびその他のメソッドと、http リクエストを提供するための人間が判読できる URL。 RPC は HTTP プロトコルに基づく必要がないため、2 つのバックエンド言語が相互に呼び出しを行う場合、RPC を使用した方がパフォーマンスが向上し (HTTP ヘッダーなどの一連の処理が不要になり)、より簡単になるはずです。設定します。フロントエンドが AJAX 経由でバックエンドを呼び出す場合は、REST API を使用することをお勧めします (とにかく HTTP のハードルを回避できないため)。

phpで人気のあるRPCフレームワークは何ですか

phpは世界で最高の言語なので、phpで人気のあるRPCフレームワークは何ですか?

まずそれらを列挙しましょう: phprpc、yar、thrift、gRPC、swoole、hprose

時間とエネルギーは限られているため、それらを 1 つずつ学習して使用するのは不可能です。最もよく使用されるものをいくつか選択します。世界で。 。 RPC の原理は同じなので、どちらもクライアント/サーバー モードですが、それぞれのフレームワークの使用方法が異なります。

私が今まで一番聞いたり接したりしているphprpcとyarを中心に説明します。

phprpc

まず、公式 Web サイトから phprpc の最新の安定バージョンをダウンロードします: ダウンロード リンク 解凍します。

インストール

中には次のような構造のファイルとフォルダーがたくさんあることがわかります:

dhparams/

pecl/

  • bigint.php

  • compat.php

  • phprpc_date.php

  • xxtea.php

  • dhparams.php

  • phprpc_server.php

  • phprpc_client.php

    dhpara ms と pecl がある
  • はフォルダーであり、 pecl の 1 つは php です。公式 Web サイトの説明によると、xxtea 拡張機能はインストールしてもしなくても、phprpc をインストールせずに実行することもできます。ただし、より高速な暗号化処理機能が必要な場合は、それをインストールできます。

  • インストールしたほうがいいです。結局のところ、高速な暗号化は良いことです:
  • インストール手順は次のとおりです。まず、pecl の下の xxtea フォルダーを php ソース コードの etx ディレクトリにコピーします: /lamp/php-5.4.11/ext。次に、phpize を使用して拡張機能を使用して再コンパイルします。

    [root@localhost /]# cd /lamp/php-5.4.11/ext/xxtea
    [root@localhost xxtea]# /usr/local/php/bin/phpize
    [root@localhost xxtea]# ./configure --enable-xxtea=shared --with-php-config=/usr/local/php/bin/php-config
    make && make install
    ログイン後にコピー

    OK、コンパイルが完了し、xxtea.so がすでに /usr/local/php/lib/php/extensions/no-debug-zts-20100525/xxtea.so にあることが表示されます。

    次に、php.ini の最後に xxtea.so を追加する必要があります:

    [root@localhost /]# vi /usr/local/php/etc/php.ini 
    [xxtea]
    extension=xxtea.so
    ログイン後にコピー

    わかりました。追加後、Apache または php-fpm を再起動する必要があります

    重启apache
    [root@localhost /]# /usr/local/apache/bin/apachectl restart
    平滑重启php-fpm
    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
    ログイン後にコピー
    ログイン後にコピー

    再起動後、phpinfo() ページを開いて検索すると、xxtea が表示されるはずです。

    始めましょう

    まず簡単な例を見てみましょう。phprpc もサーバーとクライアントに分かれています。したがって、フォルダー内の対応するファイルは phprpc_server.php と phprpc_client.php です

    公式 Web サイトにあるいくつかの例を参照して実践してみましょう:

    server.php サーバー側: このように書くと、最も単純な helloword インターフェイスが完成します。

    <?php
    include ("phprpc/phprpc_server.php");
    function HelloWorld() {
       return &#39;Hello World!&#39;;
    }
    $server = new PHPRPC_Server();
    $server->add(&#39;HelloWorld&#39;);
    $server->start();
    ログイン後にコピー

    server.php を実行し、消去したところ、エラーが報告されました。 ! !

    PHP Strict Standards:  Non-static method PHPRPC_Server::initSession()....
    Cannot redeclare gzdecode().....
    ログイン後にコピー

    グーグルで調べたら、まずphprpc_server.phpの413行目のinitSession()を静的関数に変更したと書いてありました

     static function initSession() {
        ****
     }
    ログイン後にコピー

    追記:phprpcはどうやってリリースされたのかと、とても大きな間違いでした。 ! !

    compat.phpの71行目のgzdecode()関数では、php5.4では既にこの関数が実装されています。このように関数が書き換えられてエラーが報告されるので、

    if (!function_exists(&#39;gzdecode&#39;)) {
        //将gzdecode函数包括进来
    }
    ログイン後にコピー

    OKという判定を追加します。変更を加えた後、保存します。もう一度server.phpを実行します。わかりました。もうエラーはありません。出力:

    phprpc_functions="YToxOntpOjA7czo5OiJoZWxsb3dvcmQiO30=";
    ログイン後にコピー

    次にクライアント client.php を書きましょう。どのように書かれているか見てみましょう。

    <?php
    include ("phprpc/phprpc_client.php");
    $client = new PHPRPC_Client(&#39;http://127.0.0.1/server.php&#39;);
    echo $client->HelloWorld();
    ?>
    ログイン後にコピー

    次の client.php を実行しており、出力は期待どおりです:

    Hello Word!
    ログイン後にコピー

    このような単純なサーバー/クライアントの配信が完了しました。途中間違いもありましたが、全体的には非常にシンプルで分かりやすいです!

    その他のより高度な使い方については、公式Webサイトを参照してください。

    yar

    yar は、中国の有名な PHP マスターである Hui Xinchen の傑作であり、Weibo の製品にも使用されています。これも RPC フレームワークです。純粋な C で書かれた PHP の拡張機能を使用しているため、効率は非常に高く、非同期並列処理をサポートしているため、非常に優れています。

    ダウンロードしてインストールします

    公式Webサイトからダウンロードします: http://pecl.php.net/package/yar 最新バージョンyar-1.2.4.tgz

    その後、解凍してphpソースのetxディレクトリにコピーしますコード: /lamp/php-5.4 .11/ext.次に、phpize を使用して拡張機能を使用して再コンパイルします。

    [root@localhost yar-1.2.4]# /usr/local/php/bin/phpize
    [root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config
    ログイン後にコピー

    しかし、何か問題が発生しました: プロンプト、curl に問題があります:

    configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
    ログイン後にコピー

    私のローカルマシンでは、curl に問題があると推定されているため、yum を使用してインストールしてください:

    yum -y install curl-devel
    ログイン後にコピー

    curl をインストールした後、続行しますコンパイルしてインストールすると、問題はありません:

    [root@localhost yar-1.2.4]# /usr/local/php/bin/phpize
    [root@localhost yar-1.2.4]# ./configure --with-php-config=/usr/local/php/bin/php-config
    [root@localhost yar-1.2.4]# make && make install
    ログイン後にコピー

    成功すると、yar.so 拡張子が既に /usr/local/php/lib/php/extensions/no-debug-zts- にあることが確認されます。 20100525/。

    php.ini を編集し、最後に yar.so 拡張子を追加して、Apache または php-pfm を再起動します。

    えー

    わかりました。追加後、Apache または php-fpm を再起動する必要があります

    [root@localhost /]# vi /usr/local/php/etc/php.ini 
    [yar]
    extension=yar.so
    ログイン後にコピー

    再起動後、phpinfo() ページを開いて検索すると、yar が表示されるはずです。

    始めましょう

    他の rpc フレームワークと同様、yar もサーバー/クライアント モデルなので、同じことを行って、それを呼び出す方法を示す簡単な例を書き始めます。

    yar_server.php はサーバー側を表します

    重启apache
    [root@localhost /]# /usr/local/apache/bin/apachectl restart
    平滑重启php-fpm
    kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
    ログイン後にコピー
    ログイン後にコピー

    さて、ブラウザで実行してみましょう。以下に示すような出力が表示されます。とても高級です! ! ! Niao 兄弟は、これの目的は、RPC が提供するインターフェイスの数を一目で知ることであり、API ドキュメントは省略できると述べました。

    人気のrpcフレームワークをphpで詳しく解説

    それでは、yar_client.php を書き始めましょう。これがクライアントです。

    <?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();
    ログイン後にコピー

    他の swoole や hprose などと同様に、基本的にはどちらがより多くの機能を持っているかによって決まります。使いやすくなります。

    関連する推奨事項:

    PHP の RPC フレームワークは、Redis に基づいたフロー制御システムを実装します

    RPC フレームワークの詳細な例

    PHP リモート呼び出しと RPC フレームワークの詳細なコードの説明 (画像)

以上が人気のrpcフレームワークをphpで詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート