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

相关推荐
维克兜率天7 小时前
【维克】ARMA模型:AR与MA的完美结合
后端·restful
是未才8 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
上海安当技术9 小时前
半天接入:USBKey RESTful API + C 动态库,Web 和 C/S 两套集成路径实战
前端·后端·restful·集成·usbkey
DevUI团队9 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
weixin_4316004410 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
IT_陈寒11 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户9385156350711 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo12 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林12 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端
feng尘12 小时前
# 彻底搞懂 ReentrantLock 与 tryLock:从秒杀实战到 AQS 独占模式源码剖析
后端