PHP7 使用 protobuf,以及protobuf简介_o王o的博客-CSDN博客


本站和网页 https://blog.csdn.net/u012129607/article/details/95758405 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

PHP7 使用 protobuf,以及protobuf简介_o王o的博客-CSDN博客
PHP7 使用 protobuf,以及protobuf简介
o王o
于 2019-07-14 11:39:01 发布
5280
收藏
分类专栏:
linux
文章标签:
proto
php
protobuf
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012129607/article/details/95758405
版权
linux
专栏收录该内容
23 篇文章
0 订阅
订阅专栏
场景:公司需要上传一些数据到别的平台,需要用到protobuf 数据结构的文件
protobuf 是做什么的
专业的解答: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。简单的说就是干和xml一样的事,把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议格式等场合
了解了下这种数据格式使用的场景。
1、RPC序列化,转自:http://blog.leanote.com/post/weibo-007/f40e8fee0dfb
在PRC框架中,数据的传输发生在客户端和服务端,而我们知道基于TCP协议最终传输的是二进制的0/1序列。所以,基于TCP传输协议的RPC服务自然也需要将数据结构转换成二进制,和二进制转换成数据结构的功能。所以,原则上,基于网络的数据传输只能传输二进制表示的字符串
但是,传输的二进制序列是完全没有意义的,除非有一套解析二进制串的协议。没错,这个协议可以就是目前我们大家熟知的xml,json协议。当然。除了这两者,还有其他的的序列化和反序列化协议。
XMl
<note>
<to>George</to>
<from>John</from>
<msg>Don't forget the meeting!</msg>
</note>
可以看出这种序列化协议的优点是可读性和易调试行。但是这种协议的缺点也很明显:额外空间开销大,序列化之后的数据量剧增。
JSON
"to":"George",
"from":"John",
"msg":"Don't forget the meeting!"
这种序列化协议有很大的优势:
1. 这样表示非常符合工程师对对象的理解,尤其是js工程师
2. 和xml一样,可读性强
3. 和xml相比,更加节省空间,解析速度更快
4. 由于天生的Web友好型,JSON自然而然成了AJAX数据传输的标准协议。JSON目前的使用非常广泛,但是,如果数据传输和响应时间有跟苛刻的要求,那么JSON可能性能还是差点。
Protobuf (Google Protocol Buffer)数据结构定义文件的格式如下:
syntax = "proto3";
package config;
message MailConfig{
string to = 1;
string from = 2;
string msg = 3;
然后这个协议文件客户端和服务端都需要用到。这样,网络发送字节就不需要发送和数据无关的字节了。针对上面的数据结构,序列化成json的长度是63,而按照Protobuf协议序列化之后的长度是41。如果数据更多,效果更明显。
PHP如果要使用protobuf 需要安装 proto + 安装protobuf composer包
proto 用于根据protobuf数据结构文件(.proto)生成对应的类,用于生成protobuf文件安装 google/protobuf composer 包composer require google/protobuf
proto下载地址
工具包版本下载地址proto3.0.0https://github.com/google/protobuf/releases/download/v3.3.0/protobuf-php-3.3.0.zip
使用案例:
我们首先新建一个文件夹app。然后在app文件夹内新建composer.json文件,文件内容如下:
"require":{
"google/protobuf": "^3.3"
保存之后,在app文件夹下执行composer install安装命令
3 书写 .proto 文件 我们知道,二进制序列如果没有协议,根本不知道它表示的是什么,首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf的术语中,结构化数据被称为 Message。我们这里定义一个mail的proto文件mail.proto,这个文件还是放在我们的app目录下, 文件内容如下: 其中,syntax表示我们使用的是proto3语法规则。packge的名字叫做mail,然后定义了一个名字为MailConfig的消息。这个消息有3个成员,string类型的to,string类型的from,string类型的msg。
syntax = "proto3";
package mail;
message MailConfig{
string to = 1;
string from = 2;
string msg = 3;
编译 .proto 文件,这里我们需要使用protoc,将.proto文件生成目标PHP语言。–php-out表示生成目标语言存放位置,我们就放在当前目录下,也就是app文件夹下
protoc --php_out=. mail.proto
编写测试
<?php
require_once('vendor/autoload.php');
require_once('GPBMetadata/Mail.php');
require_once('Mail/MailConfig.php');
/**
* Writer写数据,Protobuf抽象成调用相关set函数即可
*/
$foo = new \Mail\MailConfig();
$foo->setTo("George");
$foo->setFrom("John");
$foo->setMsg("Don't forget the meeting!");
$packed = $foo->serializeToString();//这里你也可以选择serializeToJsonString序列化成JSON
//Reader读数据,Protobuf抽象成调用相关get函数即可
$res = new \Mail\MailConfig();
$res->mergeFromString($packed);
$jsonArr = [
"to"=> $res->getTo(),
"from"=> $res->getFrom(),
"msg"=> $res->getMsg(),
];
var_dump($jsonArr);
输出:
array(3) {
["to"]=>
string(6) "George"
["from"]=>
string(4) "John"
["msg"]=>
string(25) "Don't forget the meeting!"
这就是一个典型的序列化和反序列化的例子,试想一下,如果我们将序列化好的二进制串通过网络发送到另一端,而另一端再使用同样的.proto文件生成的目标语言解析。这将变得比json更加的高效。因为我们可以传输更少的字节,反序列化速度也非常快。
如果使用composer包效率比较低,可以使用protobuf 的PHP C扩展,安装方法如下:
git clone https://github.com/allegro/php-protobuf
cd php-protobuf/
phpize
./configure
make && make install
//然后在php.ini里面加一下extension = "protobuf.so",再重启php-fpm
protoc --php_out=./ jrttDmp.proto
附录:
一看就懂系列之 protobuf的php版的教程https://blog.csdn.net/u011957758/article/details/52455231PHP protobuf 扩展 https://github.com/allegro/php-protobufGoogle protobuf 所有语言扩展 https://github.com/protocolbuffers/protobufprotobuf3 使用 https://www.jianshu.com/p/d2bdc966086b
o王o
关注
关注
点赞
收藏
打赏
评论
PHP7 使用 protobuf,以及protobuf简介
场景:公司需要上传一些数据到别的平台,需要用到protobuf 数据结构的文件protobuf 是做什么的专业的解答:Protocol Buffers 是一种轻便高效的结构化数据存储格式,可用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。简单的说就是干和xml一样的事,把某种数据结构的信息,以...
复制链接
扫一扫
专栏目录
PHP安装protobuf详解
01-15
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。当前的google protocol buffer仅支持:C++,Java,Python。PHP作为WEB开发的主力居然没有得到google protocol buffer的官方支持实在是有一些遗憾。
目前PHP支持google protocol buffer的开源实现包括pb4php、phpbuf等。
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
在此主要说明一下支持RPC的phpbuf作为PHP和后端接口通信的接口协议定义。
官方介绍:
https://github.com/nowelium/phpbuf
php-protobuf
10-26
protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持php、java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。
protobuf在google中是一个比较核心的基础库,作为分布式运算涉及到大量的不同业务消息的传递,如何高效简洁的表示、操作这些业务消息在google这样的大规模应用中是至关重要的。而protobuf这样的库正好是在效率、数据大小、易用性之间取得了很好的平衡。
参与评论
您还未登录,请先
登录
后发表或查看评论
protobuf协议的php例子,protobuf 示例(php&golang)
weixin_30518613的博客
04-10
194
个简单的讲,protobuf是类似于json和xml的一种序列化数据的方法,它比后两者更简单、更快、序列化后的数据长度更短。这里用做了一个php发送protobuf数据,用golang开发的server端接收数据的demo。注:本机已安装好protobuf。第一步,编写pb文件编写一个简单的pb文件,命名为hello.proto,代码内容为:syntax = "proto3";package lm...
php protobuf
wlr56789的博客
10-16
505
Protobuf是将传输数据转变成二进制数据格式,这样比json节省50%带宽,但是程序需要每次都对数据的传入和传出做处理,这样就需要程序员在程序效率和带宽之间做平衡。
一、下载 库文件
二、编写 文件传输规则(编写rule.proto)
规则文件相当于 定义一个 自定义数据类型 (选项、数据类型、参数名、参数位置)
message Person
php使用protobuffer(Linux 环境下)
Super乐De博客
01-12
308
Protobuf 简介
protobuf(Protocol buffers)是谷歌出品的跨平台、跨语言、可扩展的数据传输及存储的协议,是高效的数据压缩编码方式之一。
Protocol buffers 在序列化数据方面,它是灵活的,高效的。相比于 XML 来说,Protocol buffers 更加小巧,更加快速,更加简单。
一旦定义了要处理的数据的数据结构之后,就可以利用 Protocol buffers 的代码生成工具生成相关的代码。甚至可以在无需重新部署程序的情况下更新数据结构。
只需使用 Prot
php 使用 ProtoBuf
fangdong88的博客
10-19
452
以下教程为无需c扩展版本
官网下载protoc脚本,用于生成所需php类
https://github.com/protocolbuffers/protobuf/releases
window下下载win32或者win64版本,mac下载osx版本
解压后得到可运行的脚本protoc
编写proto消息类型,保存为person.proto
syntax="proto3";
package proto;
message Person{
string name=1;
int32
php下安装与使用protobuf
panjican的博客
07-27
2373
前言
上一周由于一个需求,需要使用protobuf协议进行交互,但是网上关于php使用protobuf协议与服务端交互的资料十分少,以及难找,因此记录一下。
ProtoBuf (Google Protocol Buffer)是由google公司设计的、用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展等特性,类似于常用的XML及JSON,但它具有更小的传输体积、更高的编码、解码能力,...
proto协议与php,初识protobuf和php的相关用法
weixin_39879522的博客
03-26
295
前言大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施。开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无法用更多的人分享一些信息和交流,所以打算开通博客,将之前evernote上记录的一些经历分享出来和大家一起探讨学习,初步定于每星期更新一篇博文,以后有时间可以能会增加更新的频率,因为不经常写,所以文采可...
如何在php项目中快速的使用protobuf2.6
qq_35335167的博客
02-18
321
protobuf,全称:Protocol buffers,是 Google 用于序列化结构化数据的语言中立、平台中立、可扩展机制——想想 XML,JSON,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码轻松地将结构化数据写入和读取各种数据流,并使用各种语言
protobuf php的使用,关于php:PHP使用protobuf
weixin_32815027的博客
03-11
90
服务器环境Ubuntu 18.04.5 LTSPHP7.2.24装置protoc【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年99元1.获取v3.13.0.1(截止2020.10.14)wget https://codeload.github.com/protocolbuffers/protobuf/tar.gz/v3.13.0.12.解压tar zxvf v3.13.0.1cd proto...
一看就懂系列之 protobuf的php版的教程
热门推荐
咖啡色的羊驼
09-07
1万+
前言年轻之时,刚接触数据库就有一直思考一个问题:要是数据量巨大对于数据的存储以及解读有没有什么神器可以助我一臂之力。长大后知道了,原来google家有一开源神器叫protobuf。刚知道的时候俺还是属于懵逼状态。这是啥?有什么好处?要怎么安装?要怎么用?,这篇文章主要就回答这几个问题。基于自己也是查过很多的资料,大多资料都是copy来copy去,无可奈何,只好自己动手总结一下。protobuf是什么
PHP probuf详细步骤_在PHP环境中使用ProtoBuf数据格式代码实例
weixin_39862716的博客
12-21
146
本篇文章小编给大家分享一下在PHP环境中使用ProtoBuf数据格式代码实例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。ProtoBuf (Google ProtocolBuffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展特性,类型于常用的XML及JSON,但具有更小的传输体积、更高的编码、解码能力,特别适合...
php如何使用protobuf3
panjiapengfly的博客
09-06
3683
简介
Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存...
PHP使用protobuf3序列化常见数据格式
pcl__0522的博客
09-22
234
1.php安装protobuf3
安装过程就不详细说明,请自行百度或参考以下文档。
参考:
安装https://github.com/protocolbuffers/protobuf/tree/master/php
官网参考文档:https://developers.google.com/protocol-buffers/docs/reference/php-generated?hl=zh-cn
1.Messages
.proto文件
syntax = "proto3";
package test;
mes
php protobuf
最新发布
lfx
03-29
178
php 编译安装protobuf拓展
在php.ini中配置protobuf.so
[protobuf]
extension = protobuf.so
本地编写protobuf脚本 编写.bat生成protobuf文件
@echo off
set protoc_exe=%cd%\protoc\bin\protoc.exe
set proto_source=%cd%\proto\
set proto_out=%cd%\php\
for %%i in (%proto_source%*.proto
学习php使用protobuf的小记录
yule117737767的专栏
06-18
385
protobuf2
//required 不可以增加或删除的字段,必须初始化
//optional 可选字段,可删除,可以不初始化
//repeated 可重复字段,对应到C#文件里,生成的是List
protobuf3
syntax = "proto3";
//optional required 要去掉
//repeated 可重复字段,对应到C#文件里,生成的是List,类似于数组
1、syntax="proto3":表明使用的是proto3格式,如果不指定则为proto2
2、package t
PHP调用protobuf的rpc接口示例和说明
12-13
PHP调用protobuf通信接口的使用示例,采用rpc通信。
protobuf for windows php
04-25
windows php5.5可用
protobuffer php,php中使用protobuffer
weixin_39617669的博客
03-18
130
Protobuf 简介protobuf(Protocol buffers)是谷歌出品的跨平台、跨语言、可扩展的数据传输及存储的协议,是高效的数据压缩编码方式之一。Protocol buffers 在序列化数据方面,它是灵活的,高效的。相比于 XML 来说,Protocol buffers 更加小巧,更加快速,更加简单。一旦定义了要处理的数据的数据结构之后,就可以利用 Protocol buff...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:技术黑板
设计师:CSDN官方博客
返回首页
o王o
CSDN认证博客专家
CSDN认证企业博客
码龄9年
暂无认证
97
原创
6万+
周排名
149万+
总排名
70万+
访问
等级
5024
积分
31
粉丝
70
获赞
27
评论
206
收藏
私信
关注
热门文章
kswapd0 进程CPU占用过高
101534
从HTTP四种POST 提交数据方式,引申JSON与JSONP区别
53142
crontab 脚本错误日志和正确的输出写入到文件
36737
key_load_public: invalid format 怎么办?
31167
error:class 'socket.error' [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socke
30513
分类专栏
laravel
9篇
php
43篇
linux
23篇
nginx
10篇
mysql
19篇
openfire
1篇
java
2篇
go
redis
6篇
js
2篇
phpstorm10
1篇
谷歌浏览器
1篇
windows
1篇
容器 Docker
1篇
mac
1篇
运维
4篇
问题
2篇
python
4篇
前端
1篇
vba
1篇
excel
1篇
大数据
1篇
其他
1篇
composer
1篇
laravel-mix
1篇
vue
1篇
wrk
最新评论
屏蔽Slow network is detected. Fallback font will be used while loading: http://font-path.extension
lzq123456dgj:
为什么我找到不到那一项
配置Nginx和php-fpm用Sock套接字连接时,找不到php-fpm.sock的原因
星夜长鸿:
终于解决了我的困惑
redis sentinel搭建以及基础知识介绍
freedomwolf:
学习了,很棒,利用脚本命令辅助复制更改配置文件,方便很多,省的复制文件后然后进入配置文件去修改,
kswapd0 进程CPU占用过高
树下躲雨要撑伞:
不一定是病毒的问题,物理内存不足的问题也是存在的。(病毒和物理内存不足这两种情况我都经历过)
linux下安装npm
skylarrrr:
太感谢了阿啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
各种开源协议介绍
unable to resolve host address ‘central.maven.org’
sequel pro 很卡
2022年1篇
2021年2篇
2020年5篇
2019年8篇
2018年46篇
2017年70篇
目录
目录
分类专栏
laravel
9篇
php
43篇
linux
23篇
nginx
10篇
mysql
19篇
openfire
1篇
java
2篇
go
redis
6篇
js
2篇
phpstorm10
1篇
谷歌浏览器
1篇
windows
1篇
容器 Docker
1篇
mac
1篇
运维
4篇
问题
2篇
python
4篇
前端
1篇
vba
1篇
excel
1篇
大数据
1篇
其他
1篇
composer
1篇
laravel-mix
1篇
vue
1篇
wrk
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
o王o
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值