详解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字符串反序列化

相关推荐
weixin_456904277 小时前
Spring Boot 用户管理系统
java·spring boot·后端
cyforkk8 小时前
Spring 异常处理器:从混乱到有序,优雅处理所有异常
java·后端·spring·mvc
程序员爱钓鱼8 小时前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
桦说编程9 小时前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik9 小时前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
老青蛙11 小时前
权限系统设计-用户设计
后端
echoyu.11 小时前
消息队列-初识kafka
java·分布式·后端·spring cloud·中间件·架构·kafka
yuluo_YX11 小时前
Go Style 代码风格规范
开发语言·后端·golang
David爱编程12 小时前
从 JVM 到内核:synchronized 与操作系统互斥量的深度联系
java·后端