MacOS搭建Laravel grpc client客户端

官方链接

官网:grpc
官网php客户端:php-clent-grpc

PHP环境

安装grpc扩展,通过pecl或自行编译安装

pecl install grpc

Grpc环境

安装protobuf protoc3

brew 安装

brew install protobuf

grpc源码编译安装

需要 cmake

brew install cmake
git clone https://github.com/grpc/grpc
# 克隆源码后进入目录
cd grpc
# 下载子模块
git submodule update --init --recursive  
mkdir -p cmake/build
cd cmake/build
# 编译 protoc 与 grpc_php_olugin makefile 文件
cmake ../..
# 编译 makefile文件 生成可执行文件
make
sudo make install

在git submodule update --init --recursive下载子模块的时候,有会出现超时失败等原因 解决办法: git submodule update失败解决办法

接上一步操作,此时还在 cmake/build 文件夹下,此时可以一起安装grpc_php_plugin插件。

make protoc grpc_php_plugin

安装grpc_php_plugin插件

grpc源码编译安装已经可以同时安装grpc_php_plugin
如通过brew安装protobuf,会附带protoc执行文件,还需另外安装grpc_php_plugin插件,安装方法同上grpc源码编译安装

只需要make grpc_php_plugin就可以了

make grpc_php_plugin

到此grpc环境已经搭好

安装grpc 相关php扩展

进入Laravel项目目录

composer require google/protobuf
composer require grpc/grpc

生成grpc php 代码

在Laravel项目根目录创建protobuf目录结构

protobuf
protobuf/compile
protobuf/protos

在protobuf/protos目录创建proto文件

GrpcDemo.proto

文件内容:

syntax = "proto3";

package GrpcDemo;

service hi {
    rpc sayHello (HiUser) returns (HiReply) {}
}

message HiUser {
    string name = 1;
    int32 sex = 2;
}

message HiReply {
    string message = 1;
    HiUser user = 2;
}

使用protoc 与 grpc_php_plugin 生成客户端代码

# 在Laravel框架根目录下执行
# --php_out php代码输出路径,里面包含request,response,client代码
# --grpc_out GPBMetadata输出路径,用于保存.proto的二进制元数据
# --plugin 生成代码插件的类型与插件的绝对路径路径
protoc --php_out=protobuf/compile --grpc_out=generate_server:protobuf/compile --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin protobuf/protos/GrpcDemo.proto

注意: --grpc_out=generate_server:protobuf/compile 亲试必须加入generate_server:才会生成Client类。

可以把grpc_php_plugin复制到项目目录便于使用

cp /usr/local/bin/grpc_php_plugin 项目目录/protobuf/

对应生成代码命令

protoc --php_out=protobuf/compile --grpc_out=generate_server:protobuf/compile --plugin=protoc-gen-grpc=protobuf/grpc_php_plugin protobuf/protos/GrpcDemo.proto

生成后文件目录

在这里插入图片描述

配置自动加载

composer.json autoload 模块

"autoload": {
   "psr-4": {
       "App\\": "app/",
       "Database\\Factories\\": "database/factories/",
       "Database\\Seeders\\": "database/seeders/",
       "GPBMetadata\\Protobuf\\Protos\\": "protobuf/compile/GPBMetadata/Protobuf/Protos",
       "": "protobuf/compile"
   }
}

根目录执行自动加载

composer dump-autoload

测试调用方法


<?php

namespace App\Http\Controllers;

use GrpcDemo\hiClient;
use GrpcDemo\HiUser;

class AppController extends Controller
{
    public function testGrpc(){
        $grpcClient = new hiClient("127.0.0.1:9503",[
            'credentials' => null,
        ]);

        $request = new HiUser();
        $request->setName('hyperf');
        $request->setSex(1);

        list($reply,$status) = $grpcClient->sayHello($request)->wait();
        $message = $reply->getMessage();
        $user = $reply->getUser();

        var_dump($message);
        var_dump($status);

        var_dump(memory_get_usage(true));
        return $message;
    }
}

配置路由测试,grpc服务自行搭建,可参考hyperf

代码示例

Laravel grpc client demo

Grpc客户端
GitHub:laravel-grpc-client-demo
Gitee:laravel-grpc-client-demo

Hyper grpc server demo

Grpc服务端
GitHub:hyperf-grpc-server-demo
Gitee:hyperf-grpc-server-demo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值