要在 PHP 中集成 gRPC 服務,您需要遵循以下步驟:
安裝 gRPC 和 Protocol Buffers:
a. 首先,確保您已經安裝了 gRPC 和 Protocol Buffers。您可以在官方文檔中找到詳細的安裝說明:https://grpc.io/docs/languages/php/quickstart/
創建 .proto
文件:
a. 使用 Protocol Buffers 語言定義您的服務接口和消息結構。例如,創建一個名為 example.proto
的文件,其中包含以下內容:
syntax = "proto3";
package Example;
service ExampleService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
生成 PHP 代碼:
a. 使用 protoc
編譯器生成 PHP 代碼。確保將 --php_out
和 --grpc_out
選項設置為您的項目目錄。例如:
protoc --php_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_php_plugin` example.proto
實現服務器:
a. 創建一個 PHP 類,實現您在 .proto
文件中定義的服務接口。例如:
<?php
require_once 'GPBMetadata/Example.php';
require_once 'Example/ExampleServiceClient.php';
require_once 'Example/ExampleServiceServer.php';
require_once 'Example/HelloRequest.php';
require_once 'Example/HelloResponse.php';
use Example\ExampleServiceImpl;
use Example\HelloRequest;
use Example\HelloResponse;
use Grpc\Server;
use Grpc\ServerContext;
class ExampleService extends ExampleServiceImpl
{
public function SayHello(ServerContext $context, HelloRequest $request): HelloResponse
{
$response = new HelloResponse();
$response->setMessage("Hello, " . $request->getName() . "!");
return $response;
}
}
$server = new Server([
'host' => '0.0.0.0:50051',
]);
$server->addService(ExampleService::class, new ExampleService());
$server->start();
運行服務器:
a. 在命令行中運行您的服務器腳本。例如:
php server.php
實現客戶端:
a. 創建一個 PHP 類,用于調用您在 .proto
文件中定義的服務接口。例如:
<?php
require_once 'GPBMetadata/Example.php';
require_once 'Example/ExampleServiceClient.php';
require_once 'Example/ExampleServiceServer.php';
require_once 'Example/HelloRequest.php';
require_once 'Example/HelloResponse.php';
use Example\ExampleServiceClient;
use Example\HelloRequest;
use Grpc\ChannelCredentials;
$client = new ExampleServiceClient('localhost:50051', [
'credentials' => ChannelCredentials::createInsecure(),
]);
$request = new HelloRequest();
$request->setName("World");
list($response, $status) = $client->SayHello($request)->wait();
if ($status->code === \Grpc\STATUS_OK) {
echo "Response: " . $response->getMessage() . PHP_EOL;
} else {
echo "Error: " . $status->details . PHP_EOL;
}
運行客戶端:
a. 在命令行中運行您的客戶端腳本。例如:
php client.php
現在,您應該能夠看到客戶端輸出 “Response: Hello, World!”,表示您已成功地在 PHP 中集成了 gRPC 服務。