>백엔드 개발 >PHP 튜토리얼 >PHP에서 널리 사용되는 rpc 프레임워크에 대한 자세한 설명

PHP에서 널리 사용되는 rpc 프레임워크에 대한 자세한 설명

小云云
小云云원래의
2018-03-19 14:31:1917125검색

RPC 프레임워크란 무엇인가요? RPC를 원격 프로시저 호출(Remote Procedure Call)이라는 한 문장으로 요약할 수 있다면 원격 호출이란 무엇입니까? 일반적으로 우리는 함수 메소드 localAdd(10, 20)와 같은 PHP에서 메소드를 호출합니다. localAdd 메소드의 특정 구현은 사용자에 의해 정의되거나 PHP 라이브러리 함수와 함께 제공됩니다. 코드는 로컬로 구현되며 로컬 호출입니다! 원격 호출은 호출된 메소드의 특정 구현이 프로그램이 실행되는 위치가 아니라 다른 원격 위치에서 수행됨을 의미합니다.

원격 호출의 원리

예를 들어 A(클라이언트)는 B(서버)가 제공하는 RemoteAdd 메서드를 호출합니다.

  1. 먼저 A와 B 사이에 TCP 연결이 설정됩니다.

  2. 그런 다음 A는 호출해야 하는 메소드의 이름(여기서는 remoteAdd) 및 메소드 매개변수(10, 20)가 바이트 스트림으로 직렬화되어 전송됩니다.

  3. B는 A가 전송한 바이트 스트림을 수락한 다음 이를 역직렬화하여 대상 메소드 이름 및 메소드 매개변수를 입력한 후 해당 메소드 호출(localAdd 가능)을 실행하고 결과 30을 반환합니다.

  4. A는 원격 호출 결과를 수락하고 30을 출력합니다.

RPC 프레임워크는 방금 언급한 세부 사항을 캡슐화하고 사용자에게 간단하고 친숙한 API 사용을 제공합니다.

원격 호출의 이점

디커플링: 서버가 방법을 수정해야 할 때 클라이언트는 전혀 인식하지 못하고 변경할 필요가 없습니다. 이 방법은 부서 간 및 회사 간 협력에 자주 사용됩니다. method 우리가 일반적으로 호출하는 공급자: 서비스가 노출됩니다.

RPC와 소켓의 차이점은 무엇인가요?

위의 간단한 설명으로 보면 RPC와 Socket은 비슷한 것 같습니다. 그들은 모두 원격 메소드를 호출하고 모두 클라이언트/서버 모드에 있습니다. 이전에 소켓에 ​​대해 자세히 이야기해 보겠습니다. 그렇다면 이들 사이의 차이점은 무엇입니까?

RPC(원격 프로시저 호출)는 클라이언트/서버 모드를 사용합니다. 두 프로세스가 서로 통신하도록 구현합니다. 소켓은 RPC에서 자주 사용하는 통신 방법 중 하나로 소켓을 기반으로 구현됩니다. 소켓보다 더 많은 네트워크 및 시스템 리소스가 필요합니다. 소켓 외에도 RPC에는 http, 운영 체제 자체 파이프라인 및 원격 프로그램에 대한 호출을 구현하는 기타 기술과 같은 다른 통신 방법도 있습니다. Microsoft의 Windows 시스템에서 RPC는 통신을 위해 명명된 파이프를 사용합니다.

RPC와 REST의 차이점은 무엇인가요?

RPC를 이해하고 나면 RPC가 클라이언트/서버 모드에 있고 원격 메소드를 호출한다는 것을 알 수 있습니다. REST도 우리에게 익숙한 API 호출 프로토콜 메소드 세트이며 클라이언트/서버 모드를 기반으로 하며 원격 메소드를 호출합니다. .그럼 둘의 차이점은 무엇인가요?

REST API와 RPC는 모두 서버 측의 인터페이스로 함수를 캡슐화하여 클라이언트가 호출할 수 있도록 노출합니다. 그러나 REST API는 HTTP 프로토콜을 기반으로 POST/GET/PUT/을 전달합니다. 프로토콜, DELETE 및 기타 메소드와 사람이 읽을 수 있는 URL을 사용하여 http 요청을 제공합니다. RPC는 HTTP 프로토콜을 기반으로 할 필요가 없으므로 두 백엔드 언어가 서로 호출하는 경우 RPC를 사용하면 더 나은 성능을 얻을 수 있으며(HTTP 헤더 등 일련의 항목 제거) 더 쉬워야 합니다. 구성합니다. 프런트엔드가 AJAX를 통해 백엔드를 호출하는 경우에는 REST API를 사용하는 것이 더 좋습니다(어차피 HTTP 장애물을 피할 수는 없기 때문입니다).

PHP에서 인기 있는 RPC 프레임워크는 무엇인가요?

PHP는 세계 최고의 언어이므로 PHP에서 인기 있는 RPC 프레임워크는 무엇인가요?

먼저 나열하겠습니다: phprpc, yar, thrift, gRPC, swoole, hprose

시간과 에너지가 제한되어 있어서 하나씩 배우고 사용하는 것은 불가능합니다. 가장 일반적으로 사용되는 몇 가지를 선택하겠습니다. 세계에서. RPC의 원리는 동일하므로 둘 다 클라이언트/서버 모드이지만 각 프레임워크의 사용법이 다릅니다.

지금까지 가장 많이 듣고 접한 phprpc와 yar를 위주로 설명합니다.

phprpc

먼저 공식 웹사이트에서 최신 안정 버전의 phprpc를 다운로드하세요. 다운로드 링크 Unzip.

Installation

내부에 다음과 같은 구조의 많은 파일과 폴더가 있음을 알 수 있습니다.

    phprpc_date.php
  • xxtea.php
  • dhparams.php
  • phprpc_server.php
  • phprpc_client.php
  • dhpara ms 및 pecl이 폴더이고 pecl 중 하나는 php입니다. 공식 웹사이트의 설명에 따르면 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

    좋아요, 컴파일이 완료되고 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를 볼 수 있습니다.

    시작하기

    먼저 간단한 예를 들어보겠습니다. phpprpc도 서버와 클라이언트로 나누어져 있습니다. 그래서 폴더에 있는 해당 파일은 phprpc_server.php 와 phprpc_client.php

    공식 홈페이지에 있는 여러 예제를 참고해서 연습해보겠습니다:

    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() {
        ****
     }

    PS. phprpc가 어떻게 출시됐는지 정말 큰 실수인지 혼란스러웠습니다. ! !

    compat.php 71행의 gzdecode() 함수에서 php5.4는 이미 이 함수를 구현했습니다. 이런 식으로 함수가 다시 작성되고 오류가 보고되므로 판단을 추가합니다:

    if (!function_exists('gzdecode')) {
        //将gzdecode函数包括进来
    }

    좋아요. 변경한 후 저장합니다. 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!

    이러한 간단한 서버/클렌트 전달이 완료되었습니다. 중간에 약간의 실수가 있었지만 대체적으로 매우 간단하고 이해하기 쉽습니다!

    기타 좀 더 고급 사용법은 공식 홈페이지를 참고해주세요.

    yar

    yar는 중국의 유명한 PHP 대가인 Hui Xinchen의 걸작으로, Weibo 제품에도 사용되었습니다. 또한 rpc 프레임워크이기도 합니다. 순수 C로 작성된 PHP 확장을 사용하기 때문에 효율성이 상당히 높으며 비동기 병렬 처리를 지원하므로 상당히 좋습니다.

    다운로드 및 설치

    공식 웹사이트에서 다운로드하세요: 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

    하지만 문제가 발생했습니다. 프롬프트, 컬에 문제가 있습니다:

    configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/</curl-dir>

    내 로컬 컴퓨터에 컬에 문제가 있는 것으로 추정되므로 yum을 사용하여 설치하세요.

    yum -y install curl-devel

    컬을 설치한 후 계속하세요.

    [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/.

    vi php.ini를 편집하고 끝에 yar.so 확장자를 추가한 다음 apache 또는 php-pfm을 다시 시작합니다.

    [root@localhost /]# vi /usr/local/php/etc/php.ini 
    [yar]
    extension=yar.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() 페이지를 열고 검색하면 yar를 볼 수 있습니다.

    시작하기

    다른 rpc 프레임워크와 마찬가지로 yar도 서버/클라이언트 모델이므로 동일한 작업을 수행하고 호출 방법을 보여주는 간단한 예제 작성을 시작합니다.

    yar_server.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();

    자, 브라우저에서 실행해 보면 아래와 같은 출력이 나옵니다. 매우 고급스럽습니다! ! ! Niao 형제는 이것의 목적이 내 rpc가 제공하는 인터페이스가 몇 개인지 한 눈에 알 수 있도록 하는 것이며, api 문서는 생략할 수 있다고 말했습니다.

    PHP에서 널리 사용되는 rpc 프레임워크에 대한 자세한 설명

    좋아요, yar_client.php 작성을 시작하겠습니다. 이것이 클라이언트입니다:

    $client = new Yar_Client("http://127.0.0.1/yar_server.php");
    echo $client->api(&#39;helo word&#39;);

    좋아, 다른 swoole, hprose 등과 마찬가지로 기본적으로 어느 것이 더 많은 기능을 가지고 있는지에 따라 다릅니다. 사용하기 더 쉽습니다.

    관련 권장사항:

    PHP의 RPC 프레임워크는 Redis 기반의 흐름 제어 시스템을 구현합니다.

    RPC 프레임워크의 자세한 예

    PHP 원격 호출 및 RPC 프레임워크에 대한 자세한 코드 설명(그림)

위 내용은 PHP에서 널리 사용되는 rpc 프레임워크에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP의 Redis 적용 예다음 기사:PHP의 Redis 적용 예