php-Grpc

3 篇文章 0 订阅
2 篇文章 0 订阅

1. protoc 生成php代码命令 

1. 首先在 demo2 文件夹下创建 helloGo文件夹,可自定义

2. 使用生成命令
    protoc --php_out=./helloPhp ./hello.proto
    此时查看文件夹下是否多了此类文件
        demo2\helloPhp\GPBMetadata\Hello.php
        demo2\helloPhp\Hello\Requests.php
        demo2\helloPhp\Hello\Responses.php

2. composer安装所需组件 

1. demo2下创建 composer.json 内容如下  demo2\helloPhp\composer.json

{
    "name": "grpc/go-php-test",
    "require": {
      "grpc/grpc": "^v1.3.0",
      "google/protobuf": "^v3.3.0" 
    },
    "autoload":{
      "psr-4":{
        "GPBMetadata\\":"GPBMetadata/", 
        "Hello\\":"Hello/"   
      }
    }
}

2. 运行 composer install 生成 vendor 和 composer.lock

    demo2\helloPhp\vendor\autoload.php
    demo2\helloPhp\composer.lock

3. 创建 demo2/php_server/serve.php

composer install
<?php

require_once __DIR__ . '../../helloPhp/vendor/autoload.php';

/**
 * 创建 client 类 实现客户端
 */
class HelloClient extends \Grpc\BaseStub{

    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * rpc Run(Requests) returns (Responses) {}
     * 用于请求和响应该服务
     * @param Requests ... 
     * @param metadata ...
     * @param options ...
     */
    public function Run(\Hello\Requests $Requests, $metadata=[], $options=[]) {
        // (/Hello.Hello/Run) 是请求服务端那个服务和方法,基本和 proto 文件定义一样
        // (\Hello\Responses) 是服务端响应信息
        return $this->_simpleRequest('/hello.Hello/Run',
            $Requests,
            ['\Hello\Responses', 'decode'],
            $metadata, $options);
    }

    public function getMessage() {
        return $this->message;
    }

}


// 客户端监听端口 
$client = new HelloClient('127.0.0.1:1234', [
    'credentials' => Grpc\ChannelCredentials::createInsecure()
]);

//实例化 Requests 数据类 ,rpc Run(Requests) 类的入参
$request = new \Hello\Requests();
$request->setName("小Q");

/**
 * @param result 响应对象 (Hello\Responses)
 * @param status ...
 */
list($result, $status) = $client->Run($request)->wait();


echo $result->getMessage();

4. 运行 serve.php, 服务端接收 "小Q",服务端返回 "hello小Q"

php demo2\php_server\serve.php

5. 出现此类报错 请安装 php_grpc扩展

Fatal error: Uncaught Error: Class 'Grpc\ChannelCredentials' not found

.https://pecl.php.net/package/gRPChttps://pecl.php.net/package/gRPC

6. 再次运行第4步

7. success

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值