前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Laravel整合gRPC

Laravel整合gRPC

作者头像
anakinsun
发布2019-06-11 10:38:00
2.3K0
发布2019-06-11 10:38:00
举报
文章被收录于专栏:学习日记学习日记

版权声明:原创勿转

最近需要用Laravel实现一个Rest的API,后端调用Golang的RPC服务,记录一下整合的过程。

环境准备

  1. php安装grpc和protobuf扩展
代码语言:javascript
复制
pecl install grpc
pecl install protobuf

找到php.ini文件,添加下面两行:

代码语言:javascript
复制
extension=grpc.so
extension=protobuf.so
  1. clone一个grpc的repo
代码语言:javascript
复制
git clone https://github.com/grpc/grpc.git

假设目录在/home/aaa/下面

  1. 安装protobuf
代码语言:javascript
复制
apt install protobuf

准备proto文件

文件名:userrpc.proto,内容如下

代码语言:javascript
复制
syntax = "proto3";
package App.UserRpc;


service User{
  rpc UserLogin(LoginInfo) returns (UserInfo) {}
}

message LoginInfo{
  string loginname= 1;
  string password= 2;
}


message UserInfo{
 int32 code= 1;
  string err_msg= 2;
  string token= 3;
  int32 userid= 4;
  string username= 5;
}

其中定义了两种消息结构和一个rpc服务。

生成PHP的gRPC客户端代码

  1. 在user.proto文件的所在目录,执行下面的命令:
代码语言:javascript
复制
protoc --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=/home/aaa/grpc/bins/opt/grpc_php_plugin user.proto

如果没问题的话,应该会生成两个目录:App和GPBMetadata

  1. 拷贝文件

把App下面的UserRpc目录拷贝到laravel的app/下,把GPBMetadata目录拷贝到和app同级的目录。

  1. 设置composer

打开laravel的composer.json文件,在classmap下添加一行:

代码语言:javascript
复制
GPBMetadata

执行下面的命令:

代码语言:javascript
复制
composer require "grpc/grpc"

然后执行:

代码语言:javascript
复制
composer dump-autoload

编写Controller

现在可以去写一个laravel的controller试试了。

代码语言:javascript
复制
  public function login(Request $request){
    $loginname = $request->input("loginname");
    $password = (string)$request->input("password");
    $userrpc = new \App\UserRpc\UserClient("127.0.0.1:50052",[
                                'credentials' => \Grpc\ChannelCredentials::createInsecure()
                ]);
    $request = new \App\UserRpc\LoginInfo();
    $request->setLoginname($loginname);
    $request->setPassword($password);
    list($recv,$status) = $userrpc->UserLogin($request)->wait();
    $code = $recv->getCode();
    echo $code;
    exit;
  }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年05月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 环境准备
  • 准备proto文件
  • 生成PHP的gRPC客户端代码
  • 编写Controller
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档