Blogger Information
Blog 1
fans 0
comment 0
visits 2816
Related recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Protobuf在PHP中使用
昵称的博客
Original
2826 people have browsed it
  1. 安装
     1.1 安装PHP请自行处理

  2.  protobuf安装

    2.1 php protobuf扩展安装

    请检查PHP是否安装这些扩展,如果没安装 请安装

    sudo apt-get install -y php-pear php5-dev autoconf automake libtool make gcc

    我们选择使用php pecl 安装该扩展


    sudo pecl install protobuf


    查看下php.ini的位置

    php --ini



    然后把 extension="protobuf.so"加到配置文件,重启php-fpm即可


    查看是否安装成功

    php -m | grep protobuf



  如果上面这些操作成功,PHP已经可以使用编译好的protobuf啦

  下面我们来安装Protoc

  •    下载地址:https://github.com/protocolbuffers/protobuf/releases (一般选择最新版本)

    执行下载

  • wget https://github.com/protocolbuffers/protobuf/releases/download/v3.9.1/protoc-3.9.1-linux-x86_64.zip

    解压,安装

  • unzip protoc-3.9.1-linux-x86_64.zip
  • cd protoc-3.9.1
  • ln bin/protoc /usr/bin/proto

    查看protoc版本号

    protoc --version

    编写一个protobuf文件(不再举例,自行编辑)

  • 生成php-protobuf文件

    protoc --php_out=out_dir 编辑成功的文件名.proto

    成功后会生成两个文件 分别为 GPBMetadata,编辑protobuf文件的package目录文件

    使用composer来把文件引入,安装protobuf解析库,开始使用。

  • 简单阐述下 在laravel中使用

    在框架中 可以执行


    protoc --php_out="protobuf/compile" "protobuf/comment.proto"


    (第一个路径为 生成文件的位置,二个为操作文件的位置)


    然后执行composer安装laravel中解析protobuf的相关库

  • composer require "google/protobuf"





    然后再composer.json文件中配置如下:

"autoload": {
        "psr-4": {
            "App\\": "app/",
            "Protoc\\": "protobuf/compile/Protoc",//生成到的位置
            "GPBMetadata\\": "protobuf/compile/GPBMetadata"
        }
    }

在控制器中使用

use Protoc\Comment;//引入生成的文件

public function testSendProtobuf()
{
     $from = new Comment();
     $from->setId(1);
     $from->setText('Hello World!');
     $from->setCreatedAt(date('Y-m-d h:i:s', time()));

     $packed = $from->serializeToString();
     return $packed;
}
public function testReceiveProtobuf(Request $request)
{
     $parsedComment= new Comment();
     $parsedComment->mergeFromString($request->getContent());
     return $parsedComment->getId();
}

配置好相关路由 调用下看看结果如何。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post