php 使用grpc例子

2023/02/09 php

php 使用grpc例子

grpc

php做客户端 go做服务器
第一步 需要安装php扩展 protobuf grpc

  • 个人安装的protobuf 为 3.6.1
  • grpc的版本为1.14.1

相关文章 git clone github.com/grpc/grpc.git

git clone github.com/grpc/grpc.git
git submodule update --init
make
make install
#为了生成grpc client stub code,最好make grpc_php_plugin
make grpc_php_plugin

不一定成功 跟服务有关 如果遇到问题可参考 git 文章

生成的命令 /usr/local/protobuf/bin/protoc --plugin=protoc-gen-php='/tmp/php-protobuf-master/protoc-gen-php.php' --proto_path='/www/tmp' --php_out=':./' '/www/tmp/sms.proto' 经常不好用 可以用下面的这个

` /usr/local/protobuf/bin/protoc –proto_path=/www/tmp –php_out=/www/tmp –grpc_out=/www/tmp –plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin /www/tmp/push.proto `

解释一下

  1. /usr/local/protobuf/bin/protoc 为安装的protobuf的产生的 如果找不到 find / -name protoc 此处为绝对的路径
  2. –plugin=protoc-gen-php=’/tmp/php-protobuf-master/protoc-gen-php.php’ 代表刚才git clone 下来的文件里面的 /tmp/php-protobuf-master/protoc-gen-php.php 也是绝对路径
  3. –proto_path=’/www/tmp’ 此处指的是sms.proto 的路径
  4. –php_out=’:./’ 此处为生成的php 代码路径 此处指当前路径
  5. ‘/www/tmp/sms.proto’ 此处为真实的sms.proto

生成为以后使用
1.需要一些类库 例如composer.json
“grpc/grpc”: “^v1.3.0”
“google/protobuf”: “^v3.3.0”

{
    "name": "laravel/lumen",
    "description": "The Laravel Lumen Framework.",
    "keywords": ["framework", "laravel", "lumen"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.6.4",
        "laravel/lumen-framework": "5.5.*",
        "vlucas/phpdotenv": "~2.2",
        "aliyuncs/oss-sdk-php": "^2.3",
        "grpc/grpc": "^v1.3.0",
        "google/protobuf": "^v3.3.0"
    }
} 

2 生成的代码都有一个 *client.php 比如user.proto 生成UserClient.php
此处有相关的使用方法
生成代码例如有
UserClient.php
UserBaseInfo.php
AuthTypeInfo.php
BatchFetchUserBaseInfoByUUIDReply.php

3 代码展示
使用时候注意一下命名空间 包含和引用的问题

$hostname="127.12.175.176:1234";
$userId="155984201";
 $request=new  GetUserBaseInfoRequest();
$request->setUserID($userId);
$client=new UserClient($hostname,[
'credentials' => \Grpc\ChannelCredentials::createInsecure(),
]);
list($result, $status) = $client->GetUserBaseInfo($request)->wait();
$client->close();
$obj=($result->getInfo());
echo $obj->getUuid();
echo $obj->getName();

->wait(); 这句很重要

Search

    Table of Contents