gRPC for PHP 实战

发布于 2018-04-21 18:12:33 阅读 431

安装grpc的服务

请上grpc官网安装

下面是源码安装步骤

git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc
cd grpc
git submodule update --init
make
sudo make install

安装PHP扩展

确保当前的php安装了grpcprotobuf的扩展。

image title

image title

如果没有的话,直接使用命令

pecl install grpc
pecl install protobuf

安装protoc

确保protoc已经安装

image title

安装grpc_php_plugin (生成php的grpc的服务接口)

检查下刚刚git clone grpc下文件夹下的grpc/bins/opt/grpc_php_plugin是否有这个文件。

生成相关php代码

protoc --proto_path=/Users/meow/mywebs/nodeService --php_out=./   --grpc_out=./   --plugin=protoc-gen-grpc=/Users/meow/mywebs/node/grpc/bins/opt/grpc_php_plugin   /Users/meow/mywebs/nodeService/nodeservice.proto

其中

--proto_pathproto文件所在的文件夹

--php_out生成php的文件文件夹

--grpc_out grpc的输出文件夹

--plugingrpc_php_plugin文件的目录

此时系统会根据proto生成相应的php代码,效果如下

image title

然后在新建一个composer.json文件,并把下面的信息输入进去

{
    "require": {
        "grpc/grpc": "^1.10",
        "google/protobuf": "^3.5"
    },
    "autoload":{
        "psr-4":{
            "GPBMetadata\\":"GPBMetadata/",
            "Nodeservice\\":"Nodeservice/"
        }
    }
}

然后执行

composer install

然后创建php的client端。

image title

代码如下:

<?php
require_once __DIR__.'/vendor/autoload.php';
$request = new \Nodeservice\Png2SvgRequest();
$request->setImgUrl('https://d30y9cdsu7xlg0.cloudfront.net/png/120046-200.png');
$request->setWidth(300);
$request->setHeight(300);

$client = new \Nodeservice\NodeServiceClient('0.0.0.0:50001', [
    'credentials' => Grpc\ChannelCredentials::createInsecure(),
]);
list($reply, $result) = $client->Png2Svg($request)->wait();
var_dump($result);

运行即可。