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 `
解释一下
- /usr/local/protobuf/bin/protoc 为安装的protobuf的产生的 如果找不到 find / -name protoc 此处为绝对的路径
- –plugin=protoc-gen-php=’/tmp/php-protobuf-master/protoc-gen-php.php’ 代表刚才git clone 下来的文件里面的 /tmp/php-protobuf-master/protoc-gen-php.php 也是绝对路径
- –proto_path=’/www/tmp’ 此处指的是sms.proto 的路径
- –php_out=’:./’ 此处为生成的php 代码路径 此处指当前路径
- ‘/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(); 这句很重要