search
HomeBackend DevelopmentPHP TutorialUsing ProtoBuf data format in PHP environment
Using ProtoBuf data format in PHP environmentJun 19, 2020 pm 06:14 PM
phpphp environmentprotobufuseData Format

Using ProtoBuf data format in PHP environment

Preface

 RPC is a Google company A leading RPC framework that uses protobuf as the data transmission format. With the maturity of the gRPC framework and the increase in the number of users, protobuf, the underlying data format used, has also received more and more attention. For the PHP ecosystem, the related ProtoBuf There are relatively few introductory documents and usage information, so I write a brief article hoping to help some students in need.

ProtoBuf (Google Protocol Buffer) is a sequence structured data format used by Google for data exchange. It has cross-platform, cross-language, and scalable characteristics. It is of the same type as commonly used XML and JSON, but It has smaller transmission volume and higher encoding and decoding capabilities. It is especially suitable for fields such as data storage and network data transmission that require high storage volume and real-time performance.

The latest version of official ProtoBuf, ProtoBuf3, already supports multiple languages: C \C#\Go\Java\Python\Ruby\Object C \Javascript\PHP, and provides tools to easily adapt to different languages Generate the class libraries required by ProtoBuf.

The following will use the Person data format as an example to describe how to use ProtoBuf3 in a PHP environment.

1. Define a message type

Create a definition file about Person (with .proto as suffix), as in the example is person.proto, the file content is as follows:


syntax="proto3";
package test;
message Person{
 string name=1;//姓名
 int32 age=2;//年龄
 bool sex=3;//性别
}

1, syntax="proto3": indicates that the proto3 format is used, if not specified, it is proto2

2. Package test: Define the package name as test. When generating a class, a directory will be generated as test

3. Message Person: Message body content, which contains the definition of each field.

2. Generate the corresponding PHP class

#After defining the format of Person, if the format does not generate what we need Class libraries are actually meaningless. Google also provides a tool protoc to generate the class libraries we want.

1. Install protoc

Installation address: protobuf-php-3.5.1.tar.gz, the latest is 3.5.1

official Release address: https://github.com/google/protobuf/releases/tag/v3.5.1

Unzip and install:


tar -zxvf protobuf-php-3.5.1.tar.gz
cd protobuf-3.5.1
./configure --prefix=/opt/soft/protobuf
make
make install

2. Generate class library

/opt/soft/protobuf/bin/protoc --php_out=./ person.proto

After generation, the following files will be generated in the current directory:

GPBMetadata/Person.php

Test/Person.php

##3. Using ProtoBuf in PHP

Using ProtoBuf in PHP relies on a protobuf extension. There are currently two ways to use it, 1: php's c extension, 2: php's lib extension package, both of which It can be found in the download package just now.


In addition, you can also use composer to install the dependent extension: composer require google/protobuf


Here I mainly use composer to install it, which should help me generate autoload


After installing the dependencies, we can start using protobuf in the PHP environment


1. Serialization


<?php
include &#39;vendor/autoload.php&#39;;
include &#39;GPBMetadata/Person.php&#39;;
include &#39;Test/Person.php&#39;;

$person = new Test\Person();
$person->setName("lailaiji");
$person->setAge("28");
$person->setSex(true);
$data = $person->serializeToString();
file_put_contents(&#39;data.bin&#39;,$data);

2. Deserialization


<?php
include &#39;vendor/autoload.php&#39;;
include &#39;GPBMetadata/Person.php&#39;;
include &#39;Test/Person.php&#39;;
$bindata = file_get_contents(&#39;./data.bin&#39;);
$person = new Test\Person();
$person->mergeFromString($bindata);
echo $person->getName();

can output lailaiji normally

Commonly used methods of using PHP:

Serialization:


1. serializeToString: serialize into a binary string


2. serializeToJsonString: serialize into a JSON string


Deserialization:


1, mergeFromString: Binary string deserialization


2, mergeFromJsonString: Json string deserialization

.

Proto’s message analysis

1. Definition:


Type variable name = position;


For example: int32 age=1;


It needs to be distinguished here. The number after the variable name means the position of the variable content in the binary sequence rather than the value of the variable. The number must be Only not reusable.


2. Currently supported types:


double, float, int32, int64, uint32, uint64, sint32, sint64


fixed32 ,fixed64,sfixed32,sfixed64,bool,bytes

Recommended tutorial: "

PHP"


The above is the detailed content of Using ProtoBuf data format in PHP environment. For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:jb51. If there is any infringement, please contact admin@php.cn delete
如何在Go中使用命名管道?如何在Go中使用命名管道?May 11, 2023 pm 04:22 PM

命名管道是一种在操作系统中相对比较低级的进程通信方式,它是一种以文件为中介的进程通信方式。在Go语言中,通过os包提供了对命名管道的支持。在本文中,我们将介绍如何在Go中使用命名管道来实现进程间通信。一、命名管道的概念命名管道是一种特殊的文件,可以被多个进程同时访问。在Linux系统中,命名管道是一种特殊的文件类型,它们存在于文件系统的某个位置上,并且可以在

如何在Go中使用第三方库?如何在Go中使用第三方库?May 11, 2023 pm 03:30 PM

在Go语言中,使用第三方库是非常方便的。许多优秀的第三方库和框架可以帮助我们快速地开发应用程序,同时也减少了我们自己编写代码的工作量。但是如何正确地使用第三方库,确保其稳定性和可靠性,是我们必须了解的一个问题。本文将从以下几个方面介绍如何使用第三方库,并结合具体例子进行讲解。一、第三方库的获取Go语言中获取第三方库有以下两种方式:1.使用goget命令首先

如何在本地安装php环境如何在本地安装php环境Mar 19, 2021 am 09:07 AM

在本地安装php环境的方法:1、下载并安装Apache;2、在官网下载PHP压缩包并解压到指定目录;3、下载并安装mysql;4、打开“环境变量”界面,配置mysql的path变量;5、打开php.ini文件,修改配置;6、打开httpd.conf文件,文件的末尾添加对PHP的支持及PHP的安装路径;7、启动Apache服务即可。

如何在PHP中使用协程?如何在PHP中使用协程?May 12, 2023 am 08:10 AM

随着传统的多线程模型在高并发场景下的性能瓶颈,协程成为了PHP编程领域的热门话题。协程是一种轻量级的线程,能够在单线程中实现多任务的并发执行。在PHP的语言生态中,协程得到了广泛的应用,比如Swoole、Workerman等框架就提供了对协程的支持。那么,如何在PHP中使用协程呢?本文将介绍一些基本的使用方法以及常见的注意事项,帮助读者了解协程的运作原理,以

如何在Go中使用WebSocket?如何在Go中使用WebSocket?May 11, 2023 pm 04:17 PM

近年来,WebSocket技术已经成为了Web开发中不可或缺的一部分。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间的通信更加流畅和高效。如今,很多现代的Web应用程序都使用了WebSocket技术,例如实时聊天、在线游戏以及实时数据可视化等。Go语言作为一个现代的编程语言,自然也提供了很好的支持WebSock

如何在 Windows 11 中按需使用 OneDrive 的文件如何在 Windows 11 中按需使用 OneDrive 的文件Apr 14, 2023 pm 12:34 PM

&lt;p&gt;Windows 系统上的 OneDrive 应用程序允许您将文件存储在高达 5 GB 的云上。OneDrive 应用程序中还有另一个功能,它允许用户选择一个选项,是将文件保留在系统空间上还是在线提供,而不占用您的系统存储空间。此功能称为按需文件。在这篇文章中,我们进一步探索了此功能,并解释了有关如何在 Windows 11 电脑上的 OneDrive 中按需使用文件的各种选项。&lt;/p&gt;&lt;h2&gt;如何使用 On

如何在Go中使用音频处理?如何在Go中使用音频处理?May 11, 2023 pm 04:37 PM

随着音频处理在各种应用场景中的普及,越来越多的程序员开始使用Go编写音频处理程序。Go语言作为一种现代化的编程语言,具有优秀的并发性和高效率的特点,使用它进行音频处理十分方便。本文将介绍如何在Go中使用音频处理技术,包括读取、写入、处理和分析音频数据等方面的内容。一、读取音频数据在Go中读取音频数据有多种方式。其中比较常用的是使用第三方库进行读取,比如go-

如何在Go中使用嵌套结构?如何在Go中使用嵌套结构?May 11, 2023 pm 04:39 PM

在Go语言中,嵌套结构是一种非常常见的技术。通过将一个结构体嵌入到另一个结构体中,我们可以将复杂的数据模型分解成更小的部分,使其易于理解和维护。本篇文章将介绍如何在Go中使用嵌套结构以及一些最佳实践。一、定义嵌套结构首先,我们需要定义一个包含嵌套结构的结构体。下面的代码演示了如何定义一个包含Person结构体的Company结构体:typePersons

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)