折腾-wordpress+grpc+java对接(2)php-grpc客户端配置

#1. 安装protoc

  1. 下载 下载地址https://github.com/protocolbuffers/protobuf/releases, 解压后得到,在bin文件夹下的 protoc.exe。我放到 D:\protoc\protoc.exe 下,并加入到系统环境变量 Path 中,就可以使用 protoc 命令了,可以用 protoc --help 来查看是否成功。

  2. 安装 解压protoc-3.11.2-win64.zip 到目录D:\PHP\protoc-3.11.2-win64\bin

  3. 配置环境变量 添加环境变量 D:\PHP\protoc-3.11.2-win64\bin

#2. 编写 protocol buffers 文件,文件名greeter.proto

syntax = "proto3";
package wpGrpc;
option java_package = "com.datayang.wp.grpc.lib";
//定义 Greeter 服务
service Greeter {
rpc SayHello ( HelloRequest) returns (  HelloReply) {}
}
//HelloRequest请求结构
message HelloRequest {
  string name = 1;
}
//TestReply 响应结构
message HelloReply {
  //返回数据类型
  string message = 1;
}

#3. 下载 PHP的gRPC扩展和protobuf扩展

PHP的gRPC扩展:http://pecl.php.net/package/gRPC PHP的protobuf扩展: http://pecl.php.net/package/protobuf 注:1、PHP的protobuf扩展没有windows版本的,但不影响使用无非就是运行速度慢点。 下载php grpc压缩包后,解压包内容复制到php的ext目录,如我的D:\PHP\php-7.4.1\ext,然后修改php.ini添加 extension=grpc

#4. 编译 protocol buffers 文件 cmd 命令protoc --php_out=. greeter.proto 会生成相应文件

#5. 安装composer

  1. 下载composer 下载地址 https://getcomposer.org/download/,执行Composer-Setup.exe ,一路下一步

  2. 使用php的composer 编写 composer.json 放到刚刚编译 protocol buffers 文件同级下

  {
    "name": "grpc-go-php",
    "require": {
      "grpc/grpc": "^v1.26.0",
      "google/protobuf": "^v3.11.2"
    },
    "autoload":{
      "psr-4":{
        "GPBMetadata":"GPBMetadata/",
        "WpGrpc":"WpGrpc/"
      }
    }
  }  

#6. 使用 Composer 下载 PHP 代码

  1. 进入到项目的目录,如:D:\wp-grpc-php 中在地址栏输入cmd回车进入,添加阿里云composer镜像composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,输入 composer install 回车,等待下载完成。

#7、定义PHP的gRPC端户端 WpGrpc文件夹中,新建ProtoClient.php文件

<?php
namespace WpGrpc;

/**
 * service protoClient{}
 * 编写(gprc定义 helloword 服务)的客户端
 */
class ProtoClient extends \Grpc\BaseStub{

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

    public function HelloWorld(\WpGrpc\HelloRequest $argument,$metadata=[],$options=[]){
        return $this->_simpleRequest('/wpGrpc.Greeter/SayHello',
            $argument,
            ['\WpGrpc\HelloReply', 'decode'],
            $metadata, $options);
    }



} 

#8. 编写php执行文件 在项目下新建RpcMain.php文件

<?php
//引入 composer 的自动载加
require __DIR__ . '/vendor/autoload.php';

//用于连接 服务端
$client = new \WpGrpc\ProtoClient('127.0.0.1:9898', [
    'credentials' => Grpc\ChannelCredentials::createInsecure()  //不加密

]);

//实例化 HelloRequest 请求类
$request = new \WpGrpc\HelloRequest();
$request->setName("小明");
$reply   = new \WpGrpc\HelloReply();

//调用远程服务
$get = $client->HelloWorld($request)->wait();

list($reply, $status) = $get;

if (!$reply) {
    echo json_encode($status);
    return;
}

//序列化为string
echo $reply->serializeToJsonString(true).PHP_EOL;
echo $reply->getMessage().PHP_EOL; //errCode



print_r($reply->serializeToJsonString(true)->getData());

java服务端下篇

参考: 地址1 地址2 地址3 地址4

暂无评论
发表新评论