在 PHP 中实现 gRPC 服务端,你需要遵循以下步骤:
安装 gRPC 和 Protocol Buffers 扩展:
首先,确保你已经安装了 gRPC 和 Protocol Buffers 扩展。可以通过 PECL 安装 gRPC 扩展:
pecl install grpc然后,在 php.ini 文件中添加以下行以启用 gRPC 扩展:
extension=grpc.so定义 .proto 文件:
创建一个 .proto 文件来定义你的服务接口和消息结构。例如,创建一个名为 hello_world.proto 的文件,内容如下:
syntax = "proto3";package helloworld;service Greeter { rpc SayHello (HelloRequest) returns (HelloReply);}message HelloRequest { string name = 1;}message HelloReply { string message = 1;}生成 PHP 代码:
使用 protoc 编译器生成 PHP 代码。确保你已经安装了 protoc-gen-php 和 protoc-gen-grpc 插件。然后运行以下命令:
protoc --php_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_php_plugin` hello_world.proto这将生成 GPBMetadata/Helloworld/HelloWorld.php 和 Helloworld/GreeterClient.php 文件。
实现服务端:
创建一个名为 server.php 的文件,实现你的服务端代码。首先,引入生成的 PHP 代码,然后实现 Greeter 服务:
<?phprequire_once 'vendor/autoload.php';require_once 'GPBMetadata/Helloworld/HelloWorld.php';require_once 'Helloworld/GreeterServer.php';use Helloworld\HelloRequest;use Helloworld\HelloReply;use Helloworld\GreeterServer;use Grpc\Server;use Grpc\ServerContext;class GreeterService extends GreeterServer{ public function SayHello(ServerContext $context, HelloRequest $request): HelloReply { $name = $request->getName(); $reply = new HelloReply(); $reply->setMessage("Hello, $name!"); return $reply; }}$server = new Server([ 'host' => '0.0.0.0:50051', 'credentials' => null,]);$server->addService(GreeterServer::serviceName(), new GreeterService());$server->start();运行服务端:
在命令行中运行以下命令启动服务端:
php server.php现在,你的 gRPC 服务端已经在监听 50051 端口。你可以使用客户端代码连接到此服务并调用 SayHello 方法。


