内容简介:紧接上一篇,下面用 PHP 作为客户端调用 golang 的服务端。如果要和世界上最好的语言
紧接上一篇,下面用 PHP 作为客户端调用 golang 的服务端。
安装 grpc_go_plugin 插件
grpc_php_plugin
插件可以帮助我们自动生成 client stub
类库(相当于 API
文件),方便我们直接引入调用,否则只生成服务/请求/响应的实体类,用起来不太方便。
# 下载 grpc 的库到本地 cd ~ && git clone -b $(curl -L https://grpc.io/release) https://github.com/grpc/grpc # 更新子模块依赖 cd grpc && git submodule update --init # 这里我们只编译 php 的插件 如果要编译所有的 make && make install make grpc_php_plugin # 插件路径 ll ./bins/opt/grpc_php_plugin
生成PHP客户端
如果要和世界上最好的语言 PHP
结合使用的话( PHP
只能做 C
端)只需要安装 grpc
和 protobuf
扩展,生成 PHP
版的库即可。
###生成php客户端库 #不会有 client stub 类 protoc -I. --php_out=plugins=grpc:./user user.proto # 会有 client stub 类 protoc -I. \ --php_out=./user \ --grpc_out=./user \ --plugin=protoc-gen-grpc=/root/grpc/bins/opt/grpc_php_plugin \ user.proto # 查看生成的服务类库 [root@localhost grpc]# tree user user ├── GPBMetadata │ └── User.php ├── User │ ├── UserClient.php │ ├── UserDeleteRequest.php │ ├── UserDeleteResponse.php │ ├── UserEntity.php │ ├── UserIndexRequest.php │ ├── UserIndexResponse.php │ ├── UserPostRequest.php │ ├── UserPostResponse.php │ ├── UserViewRequest.php │ └── UserViewResponse.php └── user.pb.go
PHP GRPC 扩展及依赖安装
#安装扩展 pecl install grpc pecl install protobuf
使用 composer
管理依赖加载。
mkdir grpc-php-client && cd grpc-php-client # 使用 composer 管理项目 composer init # 安装 grpc/protobuf 的客户端库文件 composer require grpc/grpc composer require google/protobuf # 新建 grpc 服务库目录 将生成的PHP客户端文件移动至此 mkdir grpc && mv $GOPATH/src/grpc/user/* ./grpc # 注册 psr4 自动加载服务的客户端文件 vi composer.json { "name": "root/php-client", "require": { "grpc/grpc": "^1.19", "google/protobuf": "^3.7" }, "autoload": { "psr-4": { "User\\": "./grpc/User/", "GPBMetadata\\": "./grpc/GPBMetadata/" } } } # 更新 composer 加载器 composer dump-autoload
PHP客户端代码实例
在安装完 php
的 grpc
扩展和依赖库后,我们就可以编写代码了。
<?php require_once __DIR__ . '/vendor/autoload.php'; use User\UserClient; use User\UserEntity; use User\UserIndexRequest; use User\UserIndexResponse; use User\UserViewRequest; use User\UserViewResponse; use User\UserPostRequest; use User\UserPostResponse; use User\UserDeleteRequest; use User\UserDeleteResponse; // 创建客户端实例 $userClient = new UserClient('10.10.31.211:50051', [ 'credentials' => Grpc\ChannelCredentials::createInsecure() ]); $userIndexRequest = new UserIndexRequest(); $userIndexRequest->setPage(1); $userIndexRequest->setPageSize(12); // 发送请求 返回的是一个数组 [服务接口对应的响应对象, 请求状态对象] list($userIndexResponse, $statusObj) = $userClient->UserIndex($userIndexRequest)->wait(); if (0 != $statusObj->code) { throw new \Exception($statusObj->details, $statusObj->code); } echo printf("index request end: err %d msg %s" . PHP_EOL, $userIndexResponse->getErr(), $userIndexResponse->getMsg()); /* @var [UserEntity, UserEntity] */ $data = $userIndexResponse->getData(); foreach ($data as $row) { echo $row->getName(), $row->getAge() . PHP_EOL; } // 剩余的就不写了 都很简单的 // $userClient->UserView(); // $userClient->UserPost(); // $userClient->UserDelete();
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用 Swift 从头构建 LISP 解释器
- .net – 如何使用HtmlAgility包从头开始创建html文档
- grpc - 使用 golang 带你从头撸一套 RPC 服务(一)
- 不使用先验知识与复杂训练策略,从头训练二值神经网络!
- GraphQL:从头开始
- 从头手写一个Promise
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Netty实战
诺曼·毛瑞尔(Norman Maurer)、马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal) / 何品 / 人民邮电出版社 / 2017-5-1 / 69.00
编辑推荐 - Netty之父”Trustin Lee作序推荐 - 阿里巴巴中间件高级技术专家为本书中文版作序推荐 - 系统而详细地介绍了Netty的各个方面并附带了即用型的优质示例 - 附带行业一线公司的案例研究 - 极实用的Netty技术书 无论是构建高性能的Web、游戏服务器、推送系统、RPC框架、消息中间件还是分布式大数据处理引擎,都离不开Nett......一起来看看 《Netty实战》 这本书的介绍吧!