php使用protobuf3, 安裝使用

2021-10-03 19:03:55 字數 2439 閱讀 7438

摘自:

protobuf 3.1以下版本裡並不支援php,需要安裝擴充套件等,建議直接用最新版本3.9.1

簡介:google protocol buffer(簡稱protobuf)是google公司內部的混合語言資料標準,目前已經正在使用的有超過48,162種報文格式定義和超過12183個.proto檔案。他們用於rpc系統和持續資料儲存系統。

protocol buffers是一種輕便高效的結構化資料儲存格式,可以用於結構化資料序列化,或者說序列化。他很適合做資料儲存或rpc資料交換格式。可用於通訊協議,資料儲存等領域的語言無關、平台無關、可擴充套件的序列化結構格式

安裝protobuf, linux下

以下可以自行選擇是否按照,如果是沒有安裝這些類庫,請執行

yum install -y php-pear php5-dev autoconf automake libtool make gcc  gcc-c++

解壓:tar -zxvf protobuf-php-3.9.1.tar.gz

進入資料夾:cd protobuf-php-3.9.1 

進入解壓的安裝包,執行一下命令

./configure

make & make install 

#export path = /usr/local/protobuf/bin:$path #輸入報錯,不用管

protoc  --version  //檢視是否安裝成功

錯誤及解決方法

protoc: error while loading shared libraries: libprotoc.so.9: cannot open shared

錯誤原因:protobuf的預設安裝路徑是/usr/local/lib,而/usr/local/lib 不在ubuntu體系預設的 ld_library_path 裡,所以就找不到該lib

解決方法:linux 敲擊命令:export ld_library_path=/usr/local/lib

------ protoc 安裝完成後。

需要安裝composer,並且修改指定的遠端位址為國內的映象位址  、

修改為映象位址 composer config -g repo.packagist composer
專案目錄下,定義proto檔案,這個檔案為配置定義字段順序配置。

例如:hello.proto

syntax = 'proto3';

package lm;

message helloworld

然後執行

php ./php-protobuf-master/protoc-gen-php.php cbstest.proto

然後就會形成乙個person.php的檔案<?php

/*** auto generated from cbstest.proto 

*/namespace

這裡會整合protobufmessage類,他是在protobuf.so種自動載入的

php實戰的用法

對於俺這樣非大神的人還是更關注實際的用法,如下

$foo = new person();

$foo->setname("helloproto");

$foo->setid(2);

$foo->setemail('[email protected]');

$foo->setmoney(12323.763);

$packed = $foo->serializetostring();

以上packed就是序列化後的結果,可直接存於資料庫中

$p = new person();

$p->parsefromstring($packed);

echo $p->getname();

echo $p->getemail();

echo $p->getmoney();

echo $p->getid();

以上用於資料的反序列化。

序列化:

1、serializetostring:序列化成二進位制字串

2、serializetojsonstring:序列化成json字串

反序列化:

1、mergefromstring:二進位制字串反序列化

2、mergefromjsonstring:json字串反序列化

1、定義:

型別 變數名=位置;

如:int32 age=1;

這裡需要區分,變數名後面的數字意義為該變數內容在二進位制序列中的位置而不是變數的值,該數字必須是唯一不可重複使用。

2、目前支援的型別:

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

fixed32,fixed64,sfixed32,sfixed64,bool,bytes

相關資料: protobuf語言指南 

protobuf-php 

PHP讀寫protobuf3示例

在proto3中,可以直接使用protoc命令生成php 生成的php 不能直接使用,還需要 protobuf 的php庫 支援。下面通過乙個例子演示下php怎麼使用protobuf。首先定義proto檔案 syntax proto3 package lm message helloworld 注意...

protobuf3使用,golang語言實現

檢視是否安裝成功,在命令列輸入 proto version 安裝成功之後,就可以按照protobuf的規則編碼和解碼任何我們想要傳輸的資料了。比起xml和json形式的資料傳輸,protobuf擁有更高的資料壓縮比和壓縮效率。相當於給乙個物件新增相應的屬性。指定版本 注意proto3與proto2的...

protobuf3的學習筆記

學習protobuf的過程中踩了不少的坑,這篇博文算是乙個小結吧!1 windows 10 2 visualstudio 2017 3 google.protobuf.tools.3.9.1 4 google.protobuf.3.9.1 這裡先構建乙個普通的.proto檔案,檔名為myreques...