개발 꿀팁/PHP

PHP에서 gRPC 클라이언트 사용

Jammie 2022. 7. 20. 14:26
반응형

업무는 gRPC를 이용하기 때문에 본인은 윈도10을 이용하지만 리눅스는 기본적으로 운영절차가 같다.

직접 주제로 들어가 몇 부분으로 나누다

1.Protoc 다운로드

다운로드 주소: https://github.com/google/protobuf/releaseS

여기서 사용하는 바이너리 파일, 해당 플랫폼을 선택하여 다운로드합니다.
https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protoc-3.7.1-win64.zip

압축을 풀면 bin폴더 아래에 protoc.exe가 있습니다.D:\Program Files에 넣을게요\protoc-3.7.1-win64\bin 이하, 그리고시스템 환경 변수 Path에 추가하시면 protoc 명령을 사용할 수 있습니다. protoc --version 성공 여부를 확인합니다.(이걸음이중요하게삶에사용한다)protobuf 파일의 PHP 코드로 사용됨)

2, protocol buffers 파일 작성

어떻게 쓰는지는 Protobuf3 언어 안내서를 보십시오.먼저 testgrpc_com을 위한 프로젝트를 만듭니다. 내 위치는 E:\\ www\ testgrpc_com입니다. 프로젝트 아래에 xuexitest.proto를 간단히 적습니다

syntax = "proto3";  // proto 버전 지정

package xuexitest; // 지정 번들 이름

//Xuexitest 서비스 정의
service Xuexitest {
    //SayTest 메서드 정의
    rpc SayTest(TestRequest) returns (TestReply) {}
}

//TestRequest 요청 구조
message TestRequest {
    int64 typeid = 1;
}

//TestReply 응답 구조
message TestReply {
    
   //데이터 형식 되돌리기
    message GetData {
      int64 id = 1;
      string name = 2;
   }
   
   repeated GetData getdataarr = 1;
}

3. PHP 다운로드에 대한 gRPC 확장과 protobuf 확장

PHP의 gRPC 확장: http://pecl.php.net/package/gRPC

pHP의 protobuf 확장: http://pecl.php.net/package/protobuf

참고: 1, PHP의 protobuf 확장에는 윈도가 없습니다버전입니다. 하지만 사용하는데 영향을 주지 않는 것은 느린 실행입니다. (composer를 사용하여 protobuf를 로드합니다.) 클래스 라이브러리, 아래 composer.json 프로필을 보십시오)

비고: 2, PHP 확장 설치 방법은 여기서 설명하지 않는다.

4. protocol buffers 파일 컴파일

xuexitest.proto 컴파일 proto 사용c --php_out=. xuexitest.proto는 다음을 생성합니다.

5. PHP를 사용하는 composer

먼저 composer를 설치하고 관리 및 추가하기PHP를 탑재한 클래스 라이브러리의 설치 방법에 대해서는 여기서 말하지 않겠습니다.(이 단계는 Grpc와 protobuf의 PHP 라이브러리 의존성을 해결하는 데도 중요합니다)

프로젝트에 composer.json 쓰기 방금 컴파일된 protocol buffers 파일 아래에 놓기

{
  "name": "grpc-go-php",
  "require": {
    "grpc/grpc": "^v1.3.0",
    "google/protobuf": "^v3.3.0"
  },
  "autoload":{
    "psr-4":{
      "GPBMetadata\\":"GPBMetadata/",
      "Xuexitest\\":"Xuexitest/"
    }
  }
}

6, Composer를 사용하여 PHP 코드 다운로드

1. 프로젝트의 디렉터리로 이동합니다. 예:E:\ww\testgrpc_com에서 주소 표시줄에 cmd를 입력하여 반송합니다

2.명령 프롬프트(검은 창)에 composer install을 입력하고 다운로드가 완료될 때까지 기다립니다

7. PHP를 정의하는 gRPC 단자

프로젝트에서 Xuexitest 텍스트폴더에 새 Xuexitest Client.php 파일

<?php
namespace Xuexitest;

/**
 * service Xuexitest{}
 * gprc 정의 Xuexitest 서비스) 클라이언트
 */
class XuexitestClient extends \Grpc\BaseStub{

    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * rpc SayTest(TestRequest) returns (TestReply) {}
     * 메서드 이름은 (gprc가 Xuexitest 서비스를 정의함) 메서드와 같습니다
     * 서비스를 요청하고 응답하는 데 사용
     */
    public function SayTest(\Xuexitest\TestRequest $argument,$metadata=[],$options=[]){
        // (/xuexitest.Xuexitest/SayTest) 서비스를 요청하는 서비스입니다. 기본적으로 proto 파일 정의와 동일합니다
        // (\Xuexitest\TestReply) proto 파일 정의와 같은 응답 정보입니다
        return $this->_simpleRequest('/xuexitest.Xuexitest/SayTest',
            $argument,
            ['\Xuexitest\TestReply', 'decode'],
            $metadata, $options);
    }

}

8,PHP 실행파일 작성

프로젝트 아래에 새 xuexitest.php

?php
//composer의 자동 로드 가져오기
require __DIR__ . '/vendor/autoload.php';

//서비스 측 연결용
$client = new \Xuexitest\XuexitestClient('127.0.0.1:50052', [
    'credentials' => Grpc\ChannelCredentials::createInsecure()
]);

//TestRequest 요청 클래스 인스턴스화
$request = new \Xuexitest\TestRequest();
$request->setTypeid(1);

//원격 서비스 호출
$get = $client->SayTest($request)->wait();

//배열 되돌리기
//$reply TestReply 대상입니다
//$status 배열입니다
list($reply, $status) = $get;

//배열
$getdata = $reply->getGetdataarr();

foreach ($getdata as $k=>$v){
    echo $v->getId(),'=>',$v->getName(),"\n\r";
}

9. 빨리 집행하라

 

반응형