برنامه نویسی

نحوه شروع استفاده از GRPC با PHP – قسمت 4/4

کامپایلر پروتکل ، افزونه Protoc-Gen-Grpc و Grpc.so

به عنوان اولین قدم ، ما برای اجرای اسکریپت مشتری خود به یک محیط سالم PHP نیاز داریم.

برای این کار اجازه می دهد تا از دیگر تصویر Docker خوب با ظروف زودگذر استفاده کنید و از دستور زیر برای کشیدن استفاده کنید و ببینید که آیا ماژول GRPC فعال است ، به عنوان Outout شما GRPC را چاپ خواهید کرد.

docker run --rm  getjv/grpc-php-base php -m | grep grpc
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مشتری استاتیک Gererated از پرونده protobuff

اکنون تصویر GRPC با protoc compilerبا protoc-gen-grpc افزونه و grpc.so در جای خود قرار گرفتیم
پرونده های خدمات استاتیک با استفاده از ارائه شده proto پرونده ها

به عنوان مثال ، در اینجا ما فقط از یک helloworld ساده مانند کد زیر استفاده می کنیم. اما به عنوان یک قاعده ، این یک اقدام عادی است. Bbeloow کپی از پروتئوفیل است که ما از آن استفاده می کنیم:

syntax = "proto3";

option go_package = "getjv.github.com/protos";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}

  // Sends a stream of greetings from server to client
  rpc StreamGreetings (HelloRequest) returns (stream HelloReply) {}
}

// The request message containing the user name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

مرحله بعدی کامپایل این پرونده با استفاده از Protoc است. این دستور به شرح زیر داده شده است اما ما معمولاً آن را با استفاده از SH یا ساخت پرونده اجرا می کنیم.

PHP_GRPC_CLIENT_PATH=src
GENERATED_FOLDER_NAME=generated
PROTO_PATH=infra/protos
GRPC_PHP_PLUGIN=/usr/local/bin/protoc-gen-grpc

${PWD}/bin/php/protoc-29.0.0 \
        --php_out=${PHP_GRPC_CLIENT_PATH}/${GENERATED_FOLDER_NAME} \
        --grpc_out=generate_server:${PHP_GRPC_CLIENT_PATH}/${GENERATED_FOLDER_NAME} \
        --proto_path=${PWD}/${PROTO_PATH} \
        --plugin=protoc-gen-grpc=${PWD}/bin/php/grpc_php_plugin \
        ${PWD}/${PROTO_PATH}/*.proto
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

دستور کامپایل Protofile را می خواند ، کامپایل کرده و خروجی را برای پوشه تولید شده اضافه می کند تا پروژه های موجود در دسترس برای پروژه مورد نیاز ما برای نقشه برداری آنها در composer.json برای وارد کردن خودکار پرونده های پروتکل تولید شده و GRPC LIBS:

{
    "autoload": {
        "psr-4": {
            "Helloworld\\": "generated/Helloworld/",
            "GPBMetadata\\": "generated/GPBMetadata"
        }
    },
    "require": {
        "grpc/grpc": "^v1.39.0",
        "google/protobuf": "^v3.12.2",
        "ext-grpc": "*"
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و در آخر ، کد PHP می تواند از مشتری برای استفاده از GRPC استفاده کند:



use Grpc\ChannelCredentials;
use Helloworld\GreeterClient;
use Helloworld\HelloRequest;

require __DIR__ . '/../vendor/autoload.php';

// Client gRPC (for windows and mac use: host.docker.internal:50051)
$client = new GreeterClient('172.17.0.1:50051', [
    'credentials' => ChannelCredentials::createInsecure(),
]);

$helloRequest = new HelloRequest();
$helloRequest->setName("Jhonatan");


// Unary call sample
list($reply, $status) = $client->SayHello($helloRequest)->wait();

if ($status->code === Grpc\STATUS_OK) {
    echo "Server answer: " . $reply->getMessage() . PHP_EOL;
} else {
    echo "Erro: gRPC failure status " . $status->code . " - " . $status->details . PHP_EOL;
}

حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

خروجی مانند “سلام jhonatan” ساده خواهد بود ، مانند پاسخ به درخواست منظم. اما در این حالت یک تماس متناوب است.

اکنون محیط همه تنظیم شده است و می توانید از این نقطه در حال تحول باشید تا پیشنهاد راه حل خود متناسب باشد.

می توانید مقاله ای را بررسی کنید که من تمام محتوای این سری را توضیح می دهم و به علاوه من در یک ویدیو نشان می دهم که چگونه می توانید مشتری های استاتیک تولید کنید و از هر یک از روش های سرور GRPC استفاده کنید.

امیدوارم تا اینجا از مسیر لذت ببرید. لطفاً این محتوا را دوست داشته و به اشتراک بگذارید.

Jhonatan Morais

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا