ホームページ  >  記事  >  バックエンド開発  >  PHP 環境での ProtoBuf データ形式の使用

PHP 環境での ProtoBuf データ形式の使用

Guanhui
Guanhui転載
2020-06-19 18:14:554245ブラウズ

PHP 環境での ProtoBuf データ形式の使用

はじめに

RPC は Google ですデータ転送形式として protobuf を使用する主要な RPC フレームワークです。gRPC フレームワークの成熟とユーザー数の増加に伴い、使用される基礎的なデータ形式である protobuf もますます注目を集めています。PHP エコシステムの場合、関連する ProtoBuf の紹介ドキュメントや使用方法の情報が比較的少ないため、困っている学生に役立つことを願って簡単な記事を書きます。

ProtoBuf (Google Protocol Buffer) は、Google がデータ交換に使用するシーケンス構造化データ形式です。クロスプラットフォーム、クロス言語、スケーラブルな特性を持ち、一般的なものと同じタイプです。 XMLやJSONを利用していましたが、伝送量が少なく、エンコード・デコード能力が高く、特にデータストレージやネットワークデータ伝送など、大容量かつリアルタイム性が要求される分野に適しています。

公式 ProtoBuf の最新バージョンである ProtoBuf3 は、すでに複数の言語 C \C#\Go\Java\Python\Ruby\Object C \Javascript\PHP をサポートしており、簡単に適応できるツールを提供しています。さまざまな言語 ProtoBuf に必要なクラス ライブラリを生成します。

以下では、例として Person データ形式を使用して、PHP 環境で ProtoBuf3 を使用する方法を説明します。

1. メッセージ タイプを定義します。

次のように、Person に関する定義ファイル (拡張子として .proto が付きます) を作成します。例は person.proto です。ファイルの内容は次のとおりです:


syntax="proto3";
package test;
message Person{
 string name=1;//姓名
 int32 age=2;//年龄
 bool sex=3;//性别
}

1、syntax="proto3": proto3 形式が使用されることを示します。指定されていない場合は、proto3 形式が使用されることを示します。 is proto2

2. パッケージテスト: パッケージ名をtestと定義します. クラス生成時にtest

3というディレクトリが生成されます. メッセージ担当者: メッセージ本文の内容 (各フィールドの定義が含まれます)

2. 対応する PHP クラスを生成します

#形式を定義した後形式が必要なものを生成しない場合、クラス ライブラリは実際には意味がありません。Google は、必要なクラス ライブラリを生成するためのツール プロトコルも提供しています。

1. protoc をインストールします

インストール アドレス: protobuf-php-3.5.1.tar.gz、最新は 3.5.1

officialリリースアドレス: 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. ProtoBuf の使用PHP での

PHP での ProtoBuf の使用は、protobuf 拡張機能に依存しています。現在、それを使用する方法は 2 つあります。1: php の c 拡張機能、2: php の lib 拡張機能パッケージ、どちらも使用できます。は今ダウンロードパッケージで見つけることができます。


さらに、composer を使用して、依存する拡張機能をインストールすることもできます。composer require google/protobuf


ここでは、主に Composer を使用してインストールします。これは役立つはずです。自動ロードの生成


依存関係をインストールした後、PHP 環境で protobuf の使用を開始できます


1. シリアル化


<?php
include &#39;vendor/autoload.php&#39;;
include &#39;GPBMetadata/Person.php&#39;;
include &#39;Test/Person.php&#39;;

$person = new Test\Person();
$person->setName("lailaiji");
$person->setAge("28");
$person->setSex(true);
$data = $person->serializeToString();
file_put_contents(&#39;data.bin&#39;,$data);

2. 逆シリアル化


<?php
include &#39;vendor/autoload.php&#39;;
include &#39;GPBMetadata/Person.php&#39;;
include &#39;Test/Person.php&#39;;
$bindata = file_get_contents(&#39;./data.bin&#39;);
$person = new Test\Person();
$person->mergeFromString($bindata);
echo $person->getName();

正常にライライジを出力できる

PHP を使用する一般的な方法:

シリアル化:


1.serializeToString: バイナリ文字列にシリアル化します


#2.serializeToJsonString: JSON 文字列にシリアル化します


逆シリアル化:


1、mergeFromString: バイナリ文字列の逆シリアル化


2、mergeFromJsonString: Json 文字列の逆シリアル化

.

Proto のメッセージ分析


#1. 定義:

型変数名 = 位置;

例: int32 age=1;

#ここで区別する必要があります。変数名の後の数字は、変数の値ではなく、バイナリ シーケンス内の変数内容の位置を意味します。この数字は再利用できないことのみを意味します。


2. 現在サポートされている型:


double、float、int32、int64、uint32、uint64、sint32、sint64


fixed32 、 fixed64,sfixed32,sfixed64,bool,bytes


推奨チュートリアル: "

PHP

"


以上がPHP 環境での ProtoBuf データ形式の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。