proto协议与php,初识protobuf和php的相关用法

前言

大家好,这是我在博客园的第一篇博文,很早之前就想尝试开通技术博客了,但是由于各种原因计划一直都没有实施。开通博客只是想简单的记录下自己生活工作相关的一些事情,之前一直在用evernote记录,无法用更多的人分享一些信息和交流,所以打算开通博客,将之前evernote上记录的一些经历分享出来和大家一起探讨学习,初步定于每星期更新一篇博文,以后有时间可以能会增加更新的频率,因为不经常写,所以文采可以忽略,有错误的地方还望大家及时指正。废话不多说,下面开始我的第一篇博文

正文

本文主要介绍下php结合protobuf的一些相关用法,首先php相信大家都比较了解,它是一门主要用于web开发的解释型高级面向对象的计算机编程语言,其全称是超文本预处理器(Hypertext Preprocessor),现在的最新稳定版本是7.1。下面重点介绍下protobuf,protobuf是谷歌开源的一种用于数据交换的开源协议,其主要的特点是跨平台、跨语言、可扩展,它是一种用于序列化结构数据的开源协议。目前业界在扩平台、跨语言的领域数据交换用的最多的是使用json,但是相较于json,protobuf主要的特点表现为可扩展性强、安全性好、速度更快,下面我们就详细看下php是怎么结合protobuf序列化结构数据的

1、首先需要在开发机上面安装protobuf,这里建议在github上克隆下来源码编译安装,如要步骤如下:

1)git clone https://github.com/protocolbuffers/protobuf.git

进入到源码目录protobuf执行autogen.sh文件初始化安装目录(注:在执行的过程中有时候回报错,无法执行,可能是因为automake没有安装,安装完automake在执行一般就可以了)

2)./authgen.sh

初始化安装目录之后就可以看到,当前目录下面有生成configure文件,接下来就是安装linux下面标准的编译安装步骤执行就可以了

3)./configure

4)make

5)make install

执行完以上操作之后在本地就完成了protobuf的安装,如果安装成功可以执行protoc --version查看下当前安装的版本

2、接下来就要安装php的protobuf的扩展

1)执行以下命令获取protobuf的php扩展源码

git clone https://github.com/allegro/php-protobuf.git

2)获取完源码之后进入到php-protobuf目录,按如下步骤安装protobuf的php扩展

cd php-protobuf

phpize

make

make install

3)执行完以上命令之后,在php的扩展目录下会生成一个protobuf.so的动态链接库文件,在php的配置文件中新增extension=protobuf.so的配置,通过php -m命令查看扩展是否有生效。

4)最后在php-protobuf的目录下面执行composer install安装php-protobuf相关的依赖包

3、完成了以上的准备工作之后,我们就可以开始正式的php+protobuf的开发工作了

1)首先我们需要新增protobuf的文件,我们命名为foo.proto,内容如下:

syntax = "proto2";

message Foo

{

required int32 bar = 1;

optional string baz = 2;

repeated float spam = 3;

}

这里我们定义了一个简单消息类型,其拥有三种数据类型

2)接着我们要使用protoc工具将.proto的文件转换成php的代码,命令如下:

php protoc-gen-php.php foo.proto

执行完以上命令之后会在当前目录下生成一个Foo.php的文件,这就是我们之前定义的Foo的php类文件,之后直接因为这个类文件我们就可以操作Foo类了

3)最后我们新增一个testFoo.php的文件来使用Foo类,代码如下:

require_once 'Foo.php';

$foo = new Foo();

$foo->setBar('string');

$foo->setBaz(1);

$foo->appendSpam(3.0);

$foo->appendSpam(4.0);

$packed = $foo->serializeToString();

$parsedFoo = new Foo();

$parsedFoo->clearSpam();

try {

$parsedFoo->parseFromString($packed);

} catch (Exception $ex) {

die('Oops.. there is a bug in this example, ' . $ex->getMessage());

}

$parsedFoo->dump();

执行这个文件之后就会打印如下内容:

Foo {

1: bar => 0

2: baz => "1"

3: spam(2) =>

[0] => 3

[1] => 4

}

到此为止我们就完成了一个基本的php+protobuf的开发工作,关于protobuf更多内容的以后再详细介绍。

谢谢大家,有不对的地方希望大家多多指正

标签:执行,Foo,protobuf,初识,foo,php,安装

来源: https://www.cnblogs.com/dunleavy/p/10964255.html

你可能感兴趣的:(proto协议与php)