详解protobuf在php中的应用

一、环境配置准备

当前版本为php7.4安装方式,对应protobuf版本3.24.4 其他php版本对应扩展(pecl.php.net/package/pro...)

PHP中安装protobuf扩展

安装protobuf

markdown 复制代码
	apt install php-pear

	 

	pecl install protobuf-3.24.4

开启protobuf扩展 ** 添加 protobuf 扩展到 php.ini

ini 复制代码
extension=protobuf.so

以Debian为例 安装proto

安装proto

markdown 复制代码
	sudo apt update

	 

	sudo apt install protobuf-compiler

二、通过.proto文件生成PHP消息文件

定义一个消息类型

创建一个关于Kk的定义文件(以.proto为后缀),如示例为kk.proto,文件内容如下:

ini 复制代码
	syntax="proto3";

	 

	message Kk{

	    string name=1;

	    int32 age=2;

	    bool sex=3;

	}

生成类库

ini 复制代码
protoc --php_out=./ kk.proto

生成后将在当前目录产生如下文件:

markdown 复制代码
	GPBMetadata/Kk.php 

	Kk.php

三、在PHP中使用ProtoBuf

使用composer进行安装该依赖扩展:composer require google/protobuf
序列化

php 复制代码
	<?php

	include dirname(__FILE__) . '/../../../extend/proto/GPBMetadata/Kk.php';

	include dirname(__FILE__) . '/../../../extend/proto/Kk.php';

	 

	$kk = new Kk();

	$kk->setName("姓名");

	$kk->setAge("18");

	$kk->setsex(true);

	 

	$res = $kk->serializeToString();

	file_put_contents('data.bin',$res);

	echo $res;

	 

	$bindata = file_get_contents('./data.bin');

	$person->mergeFromString($bindata);

	echo $person->getName();

	halt($bindata);

PHP常用的使用方法:

序列化:

1、serializeToString:序列化成二进制字符串

2、serializeToJsonString:序列化成JSON字符串

反序列化:

1、mergeFromString:二进制字符串反序列化

2、mergeFromJsonString:Json字符串反序列化

相关推荐
想摆烂的不会研究的研究生1 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
毕设源码-郭学长1 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
追逐时光者2 小时前
精选 10 款 .NET 开源免费、功能强大的 Windows 效率软件
后端·.net
追逐时光者2 小时前
一款开源、免费的 WPF 自定义控件集
后端·.net
S***q3773 小时前
Spring Boot管理用户数据
java·spring boot·后端
毕设源码-郭学长3 小时前
【开题答辩全过程】以 基于SpringBoot框架的民俗文化交流与交易平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
l***21783 小时前
SpringBoot Maven快速上手
spring boot·后端·maven
f***14774 小时前
SpringBoot实战:高效实现API限流策略
java·spring boot·后端
计算机毕设VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计