ما هو gRPC ولماذا تحتاجه؟
gRPC (gRPC Remote Procedure Calls) هو إطار عمل عالي الأداء ومفتوح المصدر لاستدعاء الإجراءات عن بُعد (RPC)، طورته شركة Google. يتيح لتطبيق العميل (Client) استدعاء دوال على تطبيق الخادم (Server) مباشرة، وكأنها دوال محلية، مما يبسط بناء الأنظمة الموزعة والميكروسيرفيسات.
يعتمد gRPC على Protocol Buffers (protobuf)، وهي آلية قوية لتسلسل البيانات المهيكلة. تقوم بتعريف بنية البيانات والخدمة في ملف .proto، ثم يقوم المترجم protoc بتوليد الكود بلغات متعددة (في حالتنا هذه: C++).
المزايا الرئيسية لـ gRPC:
- أداء عالٍ: يستخدم HTTP/2 لتعدد الإرسال (multiplexing) وتنسيق Protobuf الثنائي، مما يجعله أسرع بكثير من JSON/XML.
- كتابة قوية (Strong Typing): العقود بين الخدمات محددة بوضوح في ملفات
.proto. - دعم البث (Streaming): يدعم بث الخادم (server-streaming)، بث العميل (client-streaming)، والبث ثنائي الاتجاه (bidirectional-streaming).
- تعدد اللغات: يولد أكواد للعملاء والخوادم بلغات C++، Java، Python، Go، C#، Ruby وغيرها الكثير.
- مصادقة وتشفير مدمجين: دعم TLS/SSL والمعترضات (interceptors).
مكتبة gRPC للغة C++ هي تطبيق أصلي (native) يمنحك أقصى تحكم في الذاكرة والأداء، وهو أمر بالغ الأهمية للأنظمة عالية التحميل، وخوادم الألعاب، والتطبيقات المالية، وإنترنت الأشياء (IoT).
تثبيت gRPC للغة C++
تثبيت gRPC للغة C++ أكثر تعقيدًا من لغات مثل Python، حيث يتطلب الترجمة من المصدر أو استخدام مدير الحزم vcpkg. سنستعرض طريقتين رئيسيتين.
الطريقة 1: التثبيت عبر vcpkg (موصى به)
vcpkg هو مدير حزم متعدد المنصات للغة C++ من Microsoft.
# 1. استنساخ vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
# 2. تثبيت vcpkg (في Windows: bootstrap-vcpkg.bat)
./bootstrap-vcpkg.sh
# 3. الدمج مع النظام (لـ Visual Studio أو CMake)
./vcpkg integrate install
# 4. تثبيت gRPC (مع protobuf والتبعيات)
./vcpkg install grpc
بعد التثبيت، في ملف CMakeLists.txt الخاص بك، قم بتضمين الحزمة التي تم العثور عليها:
find_package(gRPC CONFIG REQUIRED)
find_package(Protobuf CONFIG REQUIRED)
target_link_libraries(my_target
gRPC::grpc++
gRPC::grpc++_reflection
protobuf::libprotobuf
)
الطريقة 2: التجميع من المصدر (Linux/macOS)
هذه الطريقة تمنحك تحكمًا أكبر، ولكنها تتطلب تثبيت التبعيات (cmake, openssl, zlib, abseil).
# استنساخ المستودع مع الوحدات الفرعية
git clone --recurse-submodules -b v1.62.0 https://github.com/grpc/grpc
cd grpc
# إنشاء مجلد للتجميع
mkdir -p cmake/build
cd cmake/build
# تكوين وتجميع
cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
بداية سريعة: مثال "Hello World"
لنقم بإنشاء تطبيق بسيط يستقبل اسم المستخدم ويعيد تحية.
الخطوة 1: تعريف الخدمة في ملف .proto
أنشئ ملفًا باسم hello.proto:
syntax = "proto3";
package helloworld;
// تعريف رسالة الطلب
message HelloRequest {
string name = 1;
}
// تعريف رسالة الرد
message HelloReply {
string message = 1;
}
// تعريف خدمة RPC
service Greeter {
// RPC أحادي: طلب واحد -> رد واحد
rpc SayHello (HelloRequest) returns (HelloReply);
}
الخطوة 2: توليد كود C++
protoc --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` hello.proto
protoc --cpp_out=. hello.proto
سيؤدي هذا إلى إنشاء