lvht/grpc

v2.1.4 2019-04-16 14:40 UTC

This package is not auto-updated.

Last update: 2024-09-15 04:31:32 UTC


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.phpexample/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-statusgrpc-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 海涛"
}