PHP讀寫protobuf3示例

2021-08-10 22:59:22 字數 1918 閱讀 1362

在proto3中,可以直接使用protoc命令生成php**。生成的php**不能直接使用,還需要 protobuf 的php庫 支援。

下面通過乙個例子演示下php怎麼使用protobuf。首先定義proto檔案:

syntax = "proto3";

package lm;

message helloworld

注意這裡採用的是proto3的語法,和proto2不太一樣,requiredoptional的限定已經沒有了,所有的字段都是可選的。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的...