protobuf,网上一大堆解释,说白了,就是跟json,xml一样的通讯协议,相比json,xml具有体积小,解析速度快的优点,我实在本地的电脑上实现的,后续会有相应的项目使用到,所以先在本地实现,以免到时候慌乱。

本地配置,w7,php环境是WampServer。

首先,要在本地搭建Protocol Buffers环境,这其中有很多版本,我使用的3.9.0,下载链接:https://github.com/protocolbuffers/protobuf/releases/tag/v3.9.0,由于是在本地Windows系统上,下载64版本,其次是设置环境变量,我直接将解压的bin下的exe文件放到了C盘中的Windows\System32下,cmd验证一下,protoc --version,显示版本号就成功了,

成功后了解一下Protocol Buffers的机制,

protobuf将一种结构称为一个message类型,我们以电话簿中的数据为例。

message Person {
required string name = 1;
required int32 id = 2; [default = 0]
optional string email = 3; repeated int32 samples = 4 [packed=true]; }

其中Person是message这种结构的名称,name、id、email是其中的Field,每个Field保存着一种数据类型,后面的1、2、3是Filed对应的数字id。id在115之间编码只需要占一个字节,包括Filed数据类型和Filed对应数字id,在162047之间编码需要占两个字节,所以最常用的数据对应id要尽量小一些。后面具体讲到编码规则时会细讲。

Field最前面的required,optional,repeated是这个Filed的规则,分别表示该数据结构中这个Filed有且只有1个,可以是0个或1个,可以是0个或任意个。optional后面可以加default默认值,如果不加,数据类型的默认为0,字符串类型的默认为空串。repeated后面加[packed=true]会使用新的更高效的编码方式。

注意:使用required规则的时候要谨慎,因为以后结构若发生更改,这个Filed若被删除的话将可能导致兼容性的问题。

作者:gaussfan
链接:https://www.jianshu.com/p/419efe983cb2
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

 
 
大体明白了,开始吧,建一个文本文档,根据自己需要的数据结构编写,编写完毕后改后缀名为proto,编写完毕后就相当于有个一个模板,不管后台发送数据还是前台得到数据解析,都需要根据模板来进行,有了模板,还需要将模板转换为各种语言能够使用的类型,php就需要转换为后缀为.php的,java就需要转化为后缀是.java的,这就用到了上面我们安装的工具,cmd命令行中,进入到Mail.proto相同目录中,运行:protoc --php_out=. mail.proto,

其中的--php_out,就是生成php需要的文件,需要什么文件就是用相应的命令,执行成功,就有了以下两个文件夹,根据模板的数据结构不同,可能生成的文件不同。

有了需要的文件,我们就可以在PHP中使用了,使用前,还需要在PHP中安装扩展,在 require中填写我们的google/protobuf+版本号,前提是你安装了Composer ,安装教程https://www.runoob.com/w3cnote/composer-install-and-usage.html,

安装完毕,填写好后,到项目composer.json同级目录,执行,composer install安装,其中可能由于修改composer.json出现报错啥的, 错误信息: https://blog.csdn.net/will5451/article/details/51484175,一般都有。

执行完毕后,出现就算成功了。这样我们就在think php中使用了Protocol Buffers,最后一步,使用它。

直接将文件夹放到了indexController同级目录,接着网上就有一大堆教程, 其中 serializeToString字面就是就是序列化成字符串,mergeFromString这个就是将字符串数据解析。至此大体结束,

本人也是php刚入坑,写的不规范之处,不对之处,包涵。

think php3 中接入protobuf(一)的更多相关文章

  1. 在lua环境中使用protobuf

    最近在cocos2dx的项目中,需要在LUA脚本层使用protobuf协议.官方已经推出了很多种语言的版本.但唯独LUA版本不全.于是开始研究protobuf在LUA下的实现,将完整的过程记录了下来, ...

  2. 在Wcf中应用ProtoBuf替代默认的序列化器

    Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...

  3. 在Web应用中接入微信支付的流程之极简清晰版

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  4. webapi 中使用 protobuf

    相比json来说,好处是速度更快,带宽占用更小.其效果大致等于json+Gzip. 在webapi中使用protobuf的方法为: 引用nuget包 Install-Package protobuf- ...

  5. 在Web应用中接入微信支付的流程之极简清晰版 (转)

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

  6. cocos2dx工程中接入支付宝sdk

    1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的支付宝的sdk的jar包拷贝到工程中的lib ...

  7. 在网络通讯中应用Protobuf

    在网络通讯中应用Protobuf Protobuf的设计非常适用于在网络通讯中的数据载体,它序列化出来的数据量少再加上以K-V的方式来存储数据,对消息的版本兼容性非常强:还有一个比较大的优点就是有着很 ...

  8. 怎样在Spark、Flink应用中使用Protobuf 3的包

    如果在在Spark.Flink应用中使用Protobuf 3的包,因为Spark默认使用的是2.5版本的包,提交任务时,可能会报如下异常: com.google.protobuf.CodedInput ...

  9. 在 Java 中使用 protobuf

    在 Java 中使用 protobuf 从 https://github.com/google/protobuf/releases 下载编译器,并设置环境变量. 创建java项目添加protobuf- ...

  10. android中接入twitter进行第三方登录

    在应用中接入Twitter进行第三方登录时,开发人员遇到了一点问题,主要是概念有点混乱,这里把经验记录一下,帮助遇到同样问题的朋友. 一.注册应用并配置登录权限 这一步比较简单,就不多说了,直接去官网 ...

随机推荐

  1. [编程基础] C++多线程入门3-小心地将参数传递给线程

    原始C++标准仅支持单线程编程.新的C++标准(称为c++11或c++0x)于2011年发布.在c++11中,引入了新的线程库.因此运行本文程序需要C++至少符合c++11标准. 文章目录 3 小心地 ...

  2. [Untiy]贪吃蛇大作战(一)——开始界面

    前言: 刚学unity没多久吧(大概1个月多点),这是我自己做的除官网之外的第一个游戏demo,中间存在很多不足的地方,但是还是希望可以给需要的人提供一些思路和帮助,有问题的小伙伴可以找我一起探讨一起 ...

  3. [cocos2d-x]关于动画

    声明一下:看见这篇文章总结的已经非常好了,没必要再去自己到处东翻西找了,链接:http://shahdza.blog.51cto.com/2410787/1546998 [唠叨] 基本动画制作需要用到 ...

  4. Zabbix与乐维监控对比分析(八)——其他功能篇

    前面我们详细介绍了Zabbix与乐维监控的架构与性能.Agent管理.自动发现.权限管理.对象管理.告警管理.可视化.图形图表及网络功能方面的对比分析,接下来我们将对二者其他功能进行对比分析. 本篇是 ...

  5. YMOI 2019.6.15

    题解 YMOI 2019.6.15 前记 NOIP信心个蛋赛,被各路大佬吊打,信心-- 耻辱墙: \(2019.6.15\) \(rank\) \(\color{red}{3}\) T1 简单队列 题 ...

  6. SICTF_wp

    misc 签到打卡完成 附加下载完成之后可以看到是qsnctf的公众号 使用010打开附件 可以发现key,去公众号回复key即可获得flag SICTF{fb23cefd-487f-42dd-a34 ...

  7. 通过一个示例形象地理解C# async await异步

    前言 相信大家看过不少讲C# async await的文章,博客园就能搜到很多,但还是有很多C#程序员不明白. 如果搞不明白,其实也不影响使用.但有人就会疑惑,为什么要用异步?我感觉它更慢了,跟同步有 ...

  8. SQLSERVER 的 nolock 到底是怎样的无锁?

    一:背景 1. 讲故事 相信绝大部分用 SQLSERVER 作为底层存储的程序员都知道 nolock 关键词,即使当时不知道也会在踩过若干阻塞坑之后果断的加上 nolock,但这玩意有什么注意事项呢? ...

  9. Unity_UIWidgets - 组件Drawer

    Unity_UIWidgets - 组件Drawer 组件Drawer Drawer 构造 代码 效果 Drawer使用完毕 结语 图标Icon QQ 今日无推荐 组件Drawer 各位伙伴,周日愉快 ...

  10. Grafana 系列文章(九):开源云原生日志解决方案 Loki 简介

    简介 Grafana Labs 简介 Grafana 是用于时序数据的事实上的仪表盘解决方案.它支持近百个数据源. Grafana Labs 想从一个仪表盘解决方案转变成一个可观察性 (observa ...