gRPC C++: دليل شامل مع أمثلة عملية
مرحبًا بكم في PythonLib! في هذا المقال، سنشرح بالتفصيل مكتبة gRPC C++، الإطار القوي لبناء الأنظمة الموزعة عالية الأداء. إذا كنت تطور خدمات مصغرة، تطبيقات خادم-عميل، أو أنظمة زمن حقيقي، فإن gRPC سيكون أداتك التي لا غنى عنها. سنغطي التثبيت، الفئات والطرق الأساسية، كتابة أمثلة عملية، ونقدم نصائح لتحسين الأداء.
1. ما هو gRPC C++ ولماذا تحتاجه؟
gRPC (gRPC Remote Procedure Calls) هو إطار حديث وعالي الأداء لاستدعاء الإجراءات عن بُعد، طورته شركة Google. يستخدم HTTP/2 للنقل و Protocol Buffers (protobuf) لتسلسل البيانات. توفر مكتبة gRPC C++ واجهة برمجة تطبيقات أصلية للغة C++، مما يسمح بإنشاء خدمات فعالة وقابلة للتوسع.
لماذا تحتاجه؟ على عكس REST APIs التقليدية القائمة على JSON/HTTP/1.1، يقدم gRPC:
- أداء عالي: بروتوكول protobuf الثنائي أسرع وأصغر حجمًا من JSON.
- كتابة صارمة: يتم وصف عقود الخدمات في ملفات .proto، مما يمنع الأخطاء في وقت التشغيل.
- دعم البث: يمكن نقل البيانات في الوقت الفعلي (بث من الخادم، من العميل، أو ثنائي الاتجاه).
- توليد تلقائي للكود: يتم إنشاء فئات الخادم والعميل تلقائيًا من ملفات .proto.
gRPC C++ مثالي لـ: بنية الخدمات المصغرة، الخلفيات المحمولة، أنظمة إنترنت الأشياء، التطبيقات المالية، وأي مكان تكون فيه السرعة والموثوقية مهمة.
2. تثبيت gRPC C++
يتطلب تثبيت gRPC C++ البناء من المصدر أو استخدام مدير الحزم vcpkg. نوصي باستخدام vcpkg للسهولة.
الطريقة 1: التثبيت عبر vcpkg (موصى به)
# استنساخ vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
# تثبيت vcpkg (في Windows: bootstrap-vcpkg.bat)
./bootstrap-vcpkg.sh
# تثبيت gRPC (يشمل protobuf)
./vcpkg install grpc
# التكامل مع CMake
./vcpkg integrate install
الطريقة 2: البناء من المصدر (Linux/macOS)
# تثبيت التبعيات
sudo apt-get install build-essential autoconf libtool pkg-config cmake git
# استنساخ المستودع
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_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
هام: بعد التثبيت، تأكد من أن أداة protoc (مترجم protobuf) متاحة في PATH.
3. بداية سريعة: مثال بسيط
لننشئ خدمة بسيطة "Greeter" (تحية).
الخطوة 1: تعريف ملف .proto
أنشئ ملفًا باسم hello.proto:
syntax = "proto3";
package helloworld;
// تعريف الخدمة
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
// رسالة الطلب
message HelloRequest {
string name = 1;
}
// رسالة الرد
message HelloReply {
string message = 1;
}
الخطوة 2: توليد كود C++
protoc --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` hello.proto
protoc --cpp_out=. hello.proto
سيتم إنشاء الملفات: hello.pb.h، hello.pb.cc، hello.grpc.pb.h، hello.grpc.pb.cc.
الخطوة 3: كتابة الخادم (server.cpp)
#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "hello.grpc.pb.h"
using grpc::Server;
using grpc::ServerB