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;
    }

    学习时的痛苦是暂时的 未学到的痛苦是终生的
  • 相关阅读:
    页面转表格并且下载
    关于表格导入
    C/C++作用域运算符::
    设计模式之观察者模式_C++
    C# 传不定参数
    C语言中的位域的使用
    C++/python求哈希值(SHA256)
    C++中纯虚函数
    类模板/函数模板实现父类指针指向子类对象(虚函数实现多态)
    Windows Socket 接口简介
  • 原文地址:https://www.cnblogs.com/grimm/p/13198555.html
Copyright © 2011-2022 走看看