어떻게 PHP 환경 에서 ProtoBuf 데이터 형식 을 사용 합 니까?
RPC 는 구 글 이 주도 하 는 RPC 프레임 워 크 이 고 protobuf 를 데이터 전송 형식 으로 사용 합 니 다.gRPC 프레임 워 크 의 성숙 과 사용자 의 증가 에 따라 바 텀 에서 사용 하 는 데이터 형식 protobuf 도 점점 중시 되 고 있 습 니 다.PHP 생태 에 있어 관련 ProtoBuf 소개 문서 와 사용 자료 가 비교적 적 습 니 다.그래서 이 약 문 을 쓰 는 것 은 필요 한 학우 들 에 게 도움 이 되 기 를 바란다.
ProtoBuf(Google Protocol Buffer)는 구 글 이 데이터 교환 에 사용 하 는 서열 구조 화 된 데이터 형식 으로 크로스 플랫폼,크로스 언어,확장 가능 한 특성 을 가지 고 자주 사용 하 는 XML 및 JSON 형식 이지 만 더 작은 전송 부피,더 높 은 인 코딩,디 코딩 능력 을 가지 고 있 으 며 특히 데이터 저장,네트워크 데이터 전송 등 저장 부피 에 적합 합 니 다.실시 간 요구 가 높 은 분야.
현재 공식 ProtoBuf 최신 버 전 ProtoBuf 3 는 C++\C\#\Go\Java\Python\Ruby\Object C\\Javascript\\PHP 를 지원 하고 있 으 며,도 구 를 제공 하여 서로 다른 언어 에 따라 ProtoBuf 가 필요 로 하 는 라 이브 러 리 를 쉽게 만 들 수 있 습 니 다.
다음은 Person 데이터 형식 을 예 로 삼 아 PHP 환경 에서 ProtoBuf 3 를 어떻게 사용 하 는 지 설명 합 니 다.
메시지 형식 정의
Person 에 대한 정의 파일(.proto 를 접미사 로 함)을 만 듭 니 다.예 를 들 어 person.proto 입 니 다.파일 내용 은 다음 과 같 습 니 다.
syntax="proto3";
package test;
message Person{
string name=1;//
int32 age=2;//
bool sex=3;//
}
1.syntax="proto 3":proto 3 형식 을 사용 하고 지정 하지 않 으 면 proto 2 로 표시 합 니 다.2.package test:패키지 이름 을 test 로 정의 하고 클래스 를 생 성 할 때 하나의 디 렉 터 리 를 test 로 생 성 합 니 다.
3.message Person:메시지 주체 내용,각 필드 의 정의
2.대응 하 는 PHP 클래스 생 성
Person 의 형식 을 정의 한 후 이 형식 은 우리 가 필요 로 하 는 라 이브 러 리 를 만 들 지 않 으 면 아무런 의미 가 없습니다.또한 구 글 은 우리 가 원 하 는 라 이브 러 리 를 만 드 는 도 구 를 제공 합 니 다.
1.protoc 설치
설치 주소:protobuf-phop-3.5.1.tar.gz,현재 최신 3.5.1
공식 발표 주소:https://github.com/google/protobuf/releases/tag/v3.5.1
압축 해제 및 설치:
tar -zxvf protobuf-php-3.5.1.tar.gz
cd protobuf-3.5.1
./configure --prefix=/opt/soft/protobuf
make
make install
2.라 이브 러 리 생 성/opt/soft/protobuf/bin/protoc --php_out=./ person.proto
생 성 후 현재 디 렉 터 리 에 다음 과 같은 파일 을 생 성 합 니 다:
GPBMetadata/Person.php
Test/Person.php
3.PHP 에서 ProtoBuf 사용
PHP 에서 ProtoBuf 를 사용 하여 protobuf 의 확장 에 의존 합 니 다.현재 두 가지 방식 으로 사용 할 수 있 습 니 다.1:phop 의 c 확장,2:phop 의 lib 확장 팩 을 제공 합 니 다.이 두 가 지 는 방금 다운로드 한 가방 에서 찾 을 수 있 습 니 다.
또한,coposer 를 사용 하여 이 의존 확장 을 설치 할 수 있 습 니 다:coposer require google/protobuf
여 기 는 주로 coposer 를 사용 하여 설치 합 니 다.autoload 를 만들어 줄 수 있 을 것 같 습 니 다.
의존 도 를 설치 하면 phop 환경 에서 protobuf 를 사용 할 수 있 습 니 다.
1.서열 화
<?php
include 'vendor/autoload.php';
include 'GPBMetadata/Person.php';
include 'Test/Person.php';
$person = new Test\Person();
$person->setName("lailaiji");
$person->setAge("28");
$person->setSex(true);
$data = $person->serializeToString();
file_put_contents('data.bin',$data);
2.반 서열 화
<?php
include 'vendor/autoload.php';
include 'GPBMetadata/Person.php';
include 'Test/Person.php';
$bindata = file_get_contents('./data.bin');
$person = new Test\Person();
$person->mergeFromString($bindata);
echo $person->getName();
lailaiji 를 정상적으로 출력 할 수 있 습 니 다.PHP 에서 자주 사용 하 는 방법:
직렬 화:
1.serializeToString:바 이 너 리 문자열 로 정렬
2.serializeToJSonString:JSON 문자열 로 정렬
역 직렬 화:
1.mergeFromString:바 이 너 리 문자열 의 역 직렬 화
2.mergeFromJSonString:JSon 문자열 의 역 직렬 화
.proto 메시지 분석
1.정의:
형식 변수 이름=위치;
int 32 age=1;
여기 서 구분 해 야 합 니 다.변수 이름 뒤의 숫자 의 미 는 이 변수 내용 이 바 이 너 리 시퀀스 에 있 는 위치 이지 변수의 값 이 아 닙 니 다.이 숫자 는 중복 사용 할 수 없 는 유일한 숫자 여야 합 니 다.
2.현재 지원 하 는 유형:
double,float,int32,int64,uint32 ,uint64,sint32,sint64
fixed32,fixed64,sfixed32,sfixed64,bool,bytes
성능 테스트
https://github.com/eishay/jvm-serializers/wiki
1.시리 얼 번호+반 시리 얼 번호 시간:
image.png
2.저장 크기:
image.pn
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.