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

相关推荐
学长毕设5 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
滴滴答答哒6 小时前
ASP.NET Core + FaceRecognitionDotNet 人脸识别实战:DI 单例、特征向量持久化与 1:N 比对
后端·asp.net
captain3768 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
IT_陈寒10 小时前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒10 小时前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go10 小时前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥430910 小时前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧10 小时前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老10 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户3600555790010 小时前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端