lvht / grpc
v2.1.4
2019-04-16 14:40 UTC
Requires
- php: ^7
- ext-curl: *
- liues1992/php-protobuf-generator: ^0.1.1
- lvht/protobuf: ^3.5
README
gRPC插件和SDK for php。
安装
composer require lvht/grpc
生成PHP SDK
运行以下命令以生成helloworld.proto的php SDK
protoc --php_out=out --grpc-php_out=composer_name=grpc/hello:out \
--plugin=protoc-gen-grpc-php=./vendor/bin/protoc-gen-grpc-php \
./helloworld.proto
你会得到
out
├── composer.json -- make sdk as a composer package
├── GPBMetadata
│ └── Helloworld.php
└── Helloworld
├── GreeterService.php -- php interface for service
├── GreeterServiceTrait.php -- generated service helper code
├── GreeterServiceStub.php -- generated service stub code
├── HelloReply.php -- message class generated by protoc
└── HelloRequest.php -- message class generated by protoc
对于在proto中定义的XXX
服务,你会得到一个XXX
接口。该XXX
接口有一个实现,即客户端的XXXServiceStub
。你需要开发自己的服务器端实现,使用XXXServerTrait
。
请参阅example/client.php
和example/server.php
以获取更多信息。
参数
protoc-gen-grpc-php提供了一些参数。
- composer_name设置生成代码的包名
- stub_trait向生成的存根添加额外的特性
- stub_trait_only替换生成存根的默认特性
简单的gRPC
除了标准的gRPC之外,生成的代码还有两个额外的特性。
通过http/1.1的gRPC
当创建存根实例时,将use_http1
标志设置为true
将使存根使用http1.1来传输RPC数据。grpc-status
和grpc-message
都将作为正常的HTTP头而不是Trailers
来传输。
简单gRPC或sRPC
将Content-Type
设置为application/json
将使存根使用更简单的模式来传输RPC数据。在简单模式下,仅支持json,并且消息前缀必须不传输。http/1和http/2都受支持。
POST /helloworld.Greeter/SayHello HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 24
Content-Type: application/json
Host: localhost:8080
User-Agent: HTTPie/0.9.9
foo: bar
{
"name": "海涛"
}
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 26
Date: Sat, 24 Feb 2018 08:09:20 GMT
Server: swoole-http-server
b-bin: 5L2g5aW9
content-type: application/json
grpc-status: 0
{
"message": "Hello 海涛"
}