zoukankan      html  css  js  c++  java
  • Laravel整合gRPC

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

    环境准备
    php安装grpc和protobuf扩展
    pecl install grpc
    pecl install protobuf

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

    extension=grpc.so
    extension=protobuf.so

    clone一个grpc的repo
    git clone https://github.com/grpc/grpc.git
    假设目录在/home/aaa/下面

    安装protobuf
    apt install protobuf
    准备proto文件
    文件名:userrpc.proto,内容如下

    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客户端代码
    在user.proto文件的所在目录,执行下面的命令:
    protoc --php_out=./ --grpc_out=./ --plugin=protoc-gen-grpc=/home/aaa/grpc/bins/opt/grpc_php_plugin user.proto
    1
    如果没问题的话,应该会生成两个目录:App和GPBMetadata

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

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

    GPBMetadata

    执行下面的命令:

    composer require "grpc/grpc"

    然后执行:

    composer dump-autoload

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

    public function login(Request $request){
    $loginname = $request->input("loginname");
    $password = (string)$request->input("password");
    $userrpc = new AppUserRpcUserClient("127.0.0.1:50052",[
    'credentials' => GrpcChannelCredentials::createInsecure()
    ]);
    $request = new AppUserRpcLoginInfo();
    $request->setLoginname($loginname);
    $request->setPassword($password);
    list($recv,$status) = $userrpc->UserLogin($request)->wait();
    $code = $recv->getCode();
    echo $code;
    exit;
    }

    学习时的痛苦是暂时的 未学到的痛苦是终生的
  • 相关阅读:
    oo第二阶段总结
    oo第一阶段总结
    散列函数的应用及其安全性
    【记下来,以后教给孩子玩】汉诺塔移动小窍门
    结对项目-四则运算出题程序(GUI版)
    读《构建之法》第四章、第十七章有感
    2016012002+小学四则运算练习软件项目报告
    Week2-作业1:阅读与博客
    阴差阳错是最好的安排
    2016011986卢琪信息安全作业5
  • 原文地址:https://www.cnblogs.com/grimm/p/13198555.html
Copyright © 2011-2022 走看看