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

相关推荐
IT_陈寒17 小时前
Vue 3.4 实战:5个被低估的Composition API技巧让我的开发效率提升40%
前端·人工智能·后端
VX:Fegn089517 小时前
计算机毕业设计|基于springboot + vue考勤管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
一 乐17 小时前
幼儿园管理|基于springboot + vue幼儿园管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
JIngJaneIL17 小时前
基于Java + vue校园论坛系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
期待のcode18 小时前
Springboot多数据源配置
java·数据库·spring boot·后端·mybatis
BingoGo18 小时前
Laravel + Vue3 前后端分离开源后台管理框架 CatchAdmin v5.0 Beta 发布
后端·php
程序员鱼皮18 小时前
什么是负载均衡?不就是加台服务器嘛!
java·后端·计算机·程序员·编程经验
闲人编程18 小时前
FastAPI性能优化技巧
后端·python·性能优化·fastapi·性能·codecapsule
岁月宁静18 小时前
FastAPI 入门指南
人工智能·后端·python