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

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

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

ابدأ الدورة

gRPC لـ PHP: المكتبات والأمثلة

\n\n

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

\n\n

لماذا نحتاج gRPC في PHP؟

\n

غالباً ما تعمل واجهات برمجة التطبيقات REST التقليدية عبر JSON و HTTP/1.1، مما يؤدي إلى تكرار البيانات وبطء التسلسل. يحل gRPC هذه المشكلات:

\n
    \n
  • بروتوكول ثنائي — يشغل protobuf مساحة أقل من JSON، ويتم معالجته بشكل أسرع.
  • \n
  • HTTP/2 — تعدد الإرسال، ضغط الرؤوس، النقل التدفقي.
  • \n
  • كتابة صارمة — يتم وصف العقود في ملفات .proto، مما يبسط التطوير وتصحيح الأخطاء.
  • \n
  • نقل تدفقي ثنائي الاتجاه — يمكن للخادم والعميل تبادل البيانات بشكل غير متزامن.
  • \n
\n\n

المكتبات الرئيسية لـ gRPC في PHP

\n

للعمل مع gRPC في PHP، ستحتاج إلى مكونين:

\n
    \n
  • grpc.so — إضافة PHP (إضافة C)، تنفذ HTTP/2 وبروتوكول gRPC.
  • \n
  • protobuf.so — إضافة لتسلسل protobuf (بديل — حزمة PHP نقية google/protobuf).
  • \n
  • حزم Composer: grpc/grpc و google/protobuf.
  • \n
\n\n

الطريقة الموصى بها للتثبيت هي عبر PECL (الإضافات) و Composer (التبعيات).

\n\n

تثبيت gRPC و protobuf

\n

للخوادم على Linux (Ubuntu/Debian):

\n
# تثبيت الإضافات عبر PECL\nsudo pecl install grpc\nsudo pecl install protobuf\n\n# الإضافة إلى php.ini\necho "extension=grpc.so" >> /etc/php/8.2/cli/php.ini\necho "extension=protobuf.so" >> /etc/php/8.2/cli/php.ini
\n\n

لنظام Windows، قم بتنزيل ملفات DLL من PECL وحددها في php.ini.

\n\n

بعد ذلك، قم بتثبيت المكتبات عبر Composer:

\n
composer require grpc/grpc\ncomposer require google/protobuf
\n\n

إنشاء ملف .proto

\n

لنصف خدمة للعمل مع المستخدمين. أنشئ ملف user.proto:

\n
syntax = "proto3";\n\npackage user;\n\nservice UserService {\n    rpc GetUser (UserRequest) returns (UserResponse);\n    rpc ListUsers (Empty) returns (UserList);\n}\n\nmessage UserRequest {\n    int32 id = 1;\n}\n\nmessage UserResponse {\n    int32 id = 1;\n    string name = 2;\n    string email = 3;\n}\n\nmessage Empty {}\n\nmessage UserList {\n    repeated UserResponse users = 1;\n}
\n\n

توليد فئات PHP من .proto

\n

قم بتثبيت protoc والإضافة لـ PHP:

\n
# قم بتنزيل protoc من https://github.com/protocolbuffers/protobuf/releases\n# ثم قم بتوليد الكود:\nprotoc --php_out=./generated --grpc_out=./generated --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin user.proto
\n\n

في المجلد generated ستظهر الفئات: UserRequest، UserResponse، UserServiceClient وغيرها.

\n\n

مثال لخادم gRPC على PHP

\n

لننشئ خادماً سيجيب على الطلبات. ملف server.php:

\n
require_once __DIR__ . '/vendor/autoload.php';\nrequire_once __DIR__ . '/generated/UserServiceServer.php';\n\nuse Grpc\\Server;\nuse User\\UserServiceServer;\nuse User\\UserRequest;\nuse User\\UserResponse;\n\nclass MyUserService extends UserServiceServer\n{\n    public function GetUser(\\Grpc\\ServerCallReader $request, \\Grpc\\ServerCallWriter $response, \\Grpc\\ServerContext $context): void\n    {\n        $req = $request->read();\n        $id = $req->getId();\n\n        $user = new UserResponse();\n        $user->setId($id);\n        $                    

توصيات