gRPC لـ PHP: المكتبات، التثبيت وأمثلة التنفيذ

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

gRPC لـ PHP: المكتبات وأمثلة التنفيذ



gRPC (استدعاءات الإجراءات عن بُعد لـ gRPC) هو إطار عمل عالي الأداء لاستدعاء الإجراءات عن بُعد، تم تطويره بواسطة Google. يستخدم Protocol Buffers (protobuf) كلغة لوصف الواجهات وتسلسل البيانات. على عكس REST، يعمل gRPC عبر HTTP/2، ويدعم النقل الثنائي الاتجاه، ويوفر كتابة صارمة. في هذه المقالة، سنشرح كيفية توصيل gRPC في PHP، وما هي المكتبات التي يجب استخدامها، وسنكتب مثالًا كاملًا للتفاعل بين العميل والخادم.



نظرة عامة على مكتبات gRPC في PHP



للعمل مع gRPC في PHP، هناك طريقتان رئيسيتان:



  • إضافة grpc.so — الإضافة الرسمية بلغة C من gRPC. توفر أقصى أداء، ولكنها تتطلب التجميع والإعداد على الخادم.
  • عميل PHP نقي (على سبيل المثال، grpc/grpc عبر Composer) — تنفيذ بلغة PHP يعمل عبر cURL و HTTP/2. أبطأ، لكنه أسهل في النشر.


للإنتاج، يُوصى باستخدام إضافة grpc، وللتطوير أو الاختبار، استخدم عميل PHP النقي.



تثبيت المكونات الضرورية



1. تثبيت protoc والإضافة لـ PHP



قم بتنزيل مترجم protobuf من المستودع الرسمي حسب نظام التشغيل الخاص بك. لتوليد كود PHP، ستحتاج إلى الإضافة protoc-gen-php-grpc:



# تثبيت protoc (لينكس)wget https://github.com/protocolbuffers/protobuf/releases/download/v25.0/protoc-25.0-linux-x86_64.zipunzip protoc-25.0-linux-x86_64.zip -d /usr/local/protocexport PATH=$PATH:/usr/local/protoc/bin

# تثبيت الإضافة لـ gRPC PHPsudo apt-get install php-dev php-cli php-pearsudo pecl install grpcsudo pecl install protobuf


2. تثبيت تبعيات Composer



أنشئ مشروعًا وأضف الحزم الضرورية:



composer initcomposer require grpc/grpccomposer require google/protobuf


إنشاء ملف .proto



لنحدد خدمة بسيطة للعمل مع المستخدمين. أنشئ ملفًا باسم user.proto:



syntax = "proto3";

package user;

service UserService { rpc GetUser (UserRequest) returns (UserResponse); rpc ListUsers (Empty) returns (stream UserResponse);}

message UserRequest { int32 id = 1;}

message UserResponse { int32 id = 1; string name = 2; string email = 3;}

message Empty {}


توليد كود PHP من .proto



نفذ الأمر لتجميع .proto إلى فئات PHP:



protoc --php_out=./generated --grpc_out=./generated \       --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin \       user.proto


في المجلد generated ستظهر الملفات:

  • GPBMetadata/User.php — بيانات وصفية لملف proto
  • User/UserRequest.php — فئة الطلب
  • User/UserResponse.php — فئة الرد
  • User/UserServiceClient.php — عميل لاستدعاء الخدمة


تنفيذ خادم gRPC على PHP



للجزء الخادم، نستخدم الإضافة الرسمية grpc. أنشئ ملفًا باسم server.php:



<?phprequire_once __DIR__ . '/vendor/autoload.php';require_once __DIR__ . '/generated/User/UserServiceInterface.php';require_once __DIR__ . '/generated/User/UserServiceServer.php';

use Grpc\\Server;use User\\UserRequest;use User\\UserResponse;use User\\UserServiceServer;

class MyUserService extends UserServiceServer{ public function GetUser(\\User\\UserRequest $request): \\User\\UserResponse { $response = new UserResponse(); $response->setId($request->getId()); $response->setName('John Doe'); $response->setEmail('john@exa

توصيات