在proto3中,可以直接使用protoc
命令生成php**。生成的php**不能直接使用,還需要 protobuf 的php庫 支援。
下面通過乙個例子演示下php怎麼使用protobuf。首先定義proto檔案:
syntax = "proto3";
package lm;
message helloworld
注意這裡採用的是proto3的語法,和proto2不太一樣,required
和optional
的限定已經沒有了,所有的字段都是可選的。proto3相比proto2有什麼區別,可以參照 這篇文章。
接著用protoc
生成php檔案:
protoc --php_out=./ hello.proto
會看到生成了乙個hello.pb.php
檔案:
namespace
lm;use
google\protobuf\internal\descriptorpool;
usegoogle\protobuf\internal\gpbtype;
usegoogle\protobuf\internal\repeatedfield;
usegoogle\protobuf\internal\gpbutil;
class
helloworld
extends \google\protobuf\internal\message
composer require google/protobuf
採用composer方式引入google/protobuf
之後,專案中會出現乙個vendor
目錄。在自己的**中includevendor
下的autoload.php
,以及剛才生成的helloworld.pb.php
檔案,就可以進行二進位制的讀寫了。
有了google/protobuf
庫的幫助,php讀寫protobuf格式的二進位制還是很方便的。
利用protobuf寫入資料到二進位制檔案:
<?php
include
'vendor/autoload.php';
include
'hello.pb.php';
$from = new \lm\helloworld();
$from->setid(1);
$from->setstr('foo bar, this is a message');
$from->setopt(29);
$data = $from->serializetostring();
file_put_contents('data.bin', $data);
讀取同樣的二進位制檔案:
<?php
include
'vendor/autoload.php';
include
'hello.pb.php';
$data = file_get_contents('data.bin');
$to = new \lm\helloworld();
$to->mergefromstring($data);
echo
$to->getid() . php_eol;
echo
$to->getstr() . php_eol;
echo
$to->getopt() . php_eol;
希望對您的工作有幫助。:-) php使用protobuf3, 安裝使用
摘自 protobuf 3.1以下版本裡並不支援php,需要安裝擴充套件等,建議直接用最新版本3.9.1 簡介 google protocol buffer 簡稱protobuf 是google公司內部的混合語言資料標準,目前已經正在使用的有超過48,162種報文格式定義和超過12183個.prot...
protobuf3的學習筆記
學習protobuf的過程中踩了不少的坑,這篇博文算是乙個小結吧!1 windows 10 2 visualstudio 2017 3 google.protobuf.tools.3.9.1 4 google.protobuf.3.9.1 這裡先構建乙個普通的.proto檔案,檔名為myreques...
protobuf3使用,golang語言實現
檢視是否安裝成功,在命令列輸入 proto version 安裝成功之後,就可以按照protobuf的規則編碼和解碼任何我們想要傳輸的資料了。比起xml和json形式的資料傳輸,protobuf擁有更高的資料壓縮比和壓縮效率。相當於給乙個物件新增相應的屬性。指定版本 注意proto3與proto2的...