PHPackages                             hzwz/grpc-server - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. hzwz/grpc-server

ActiveLibrary[API Development](/categories/api)

hzwz/grpc-server
================

swoft grpc custom server

1.1(4y ago)010MITPHPPHP &gt;=7.0

Since Aug 11Pushed 4y ago1 watchersCompare

[ Source](https://github.com/afdafd/swoft-grpc-server)[ Packagist](https://packagist.org/packages/hzwz/grpc-server)[ RSS](/packages/hzwz-grpc-server/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (4)Versions (3)Used By (0)

swoft grpc server 端
-------------------

[](#swoft-grpc-server-端)

### 1. 下载组件

[](#1-下载组件)

```
composer下载：composer require hzwz/grpc-server dev-master

```

### 2. 创建Grpc和相关目录

[](#2-创建grpc和相关目录)

```
1. 在 app/ 目录下创建一个Grpc目录
2. 在 Grpc/ 目录里分别创建protos和Services两个目录

```

- 说明：protos目录里是存放 \*.proto相关文件。Services目录里是实现接口转换的

#### \*.proto文件定义实例：

[](#proto文件定义实例)

```
syntax = "proto3";

package Brother;

service Agents {
  rpc initProfitPersonInfo(initProfitPersonRequest) returns(initProfitPersonResponse);  //把运营商初始化为默认的分成人员
  rpc getGroupIdsFromShare(getShareGroupListByShareUserRequest)  returns(getShareGroupListByShareUserResponse);  //根据合伙人ID返回对应的分组ID集
  rpc getCompositeUserInfo(getCompositeUserInfoRequest) returns(getCompositeUserInfoResponse);  //通过用户类型和手机号获取对应用户信息
}

message baseField {
    int64 u_id       = 1;
    int32 u_type     = 2;
    int32 company_id = 3;
}

//把运营商初始化为默认的分成人员
message initProfitPersonRequest {
    int32 group_id       = 1;
    baseField baseFields = 2;
}

message initProfitPersonResponse {}

//根据合伙人ID返回对应的分组ID集
message getShareGroupListByShareUserRequest {
  baseField baseFields = 1;
}

message getShareGroupListByShareUserResponse {
    repeated string data = 1;
}

//通过用户类型和手机号获取对应用户信息
message getCompositeUserInfoRequest {
  int32 u_type     = 1;
  int32 company_id = 2;
  string phone     = 3;
}

message getCompositeUserInfoResponse {
  string id         = 1;
  string nickname   = 2;
  string phone      = 3;
  string headImgUrl = 4;
}

```

- 通过定义好的\*.proto文件生成实际的代码：

`protoc --php_out=. --grpc_out=. --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin *.proto `

```
  说明：
  1. --php_out 这个是生成php代码的一个指令
  2. --grpc_out 这个是生成php grpc客户端代码的指令
  3. 指令后面的 =. 这个是表示为：在当前目录下生成，也可以指定具体的目录。
  4. --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin
     这个是表示：生成grpc代码时所使用的grpc插件和对应插件所在的位置
  5. --proto_path 指令可以指定 *.proto文件的具体路径
  6. 除了--proto_path外还有一个别名 -I 和--proto_path作用是一样的

```

- 更详细的可以查看对应的文档：
- 1.
- 2.
- 3.

#### Servierce说明：

[](#servierce说明)

- 哪些服务类和接口是需要提供给兄弟服务调用的，可以在这个目下处理：
- 比如汽车桩用户中心里的：运营商，C端用户两个服务的一些接口需要提供给兄弟服务调用，目录定义参考如下：

```
   1. Services/Brother/OperatorService 运营商服务类
   2. Services/Brother/UserService     C端用户服务类

```

- 服务类定义好以后就需要定义服务路由了。GRPC路由和HTTP路由定义形式不太一样，所以单独的提供了一个 @GrpcService() 注解指令来设置GRPC路由。
- 设置格式是：包名+服务类名。如下：

```
