在 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
服務:
<?php
require_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
方法。