protobuf C++: دليل شامل مع أمثلة عملية

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

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

ابدأ الدورة

ما هو Protocol Buffers (protobuf) ولماذا تحتاجه؟

Protocol Buffers (protobuf) هي آلية قوية وفعالة وقابلة للتوسع لتسلسل البيانات المهيكلة، طورتها Google. تتيح لك تعريف بنية البيانات مرة واحدة في ملف خاص (.proto)، ثم إنشاء كود مصدر بلغات برمجة متعددة (C++، Java، Python، Go وغيرها) لقراءة وكتابة هذه البيانات.

لماذا تحتاج protobuf؟

  • الكفاءة: يقوم Protobuf بتسلسل البيانات إلى تنسيق ثنائي أصغر حجماً وأسرع في المعالجة من التنسيقات النصية مثل XML أو JSON. هذا مهم جداً للأنظمة عالية التحميل وهندسة الخدمات المصغرة.
  • السرعة: تتم عملية التسلسل وإلغاء التسلسل بشكل أسرع بكثير من التنسيقات النصية التقليدية.
  • أمان الأنواع: يضمن الكود المُنشأ كتابة صارمة للأنواع، مما يقلل من الأخطاء أثناء التنفيذ.
  • التعددية المنصات واللغات: يمكنك تعريف مخطط البيانات مرة واحدة واستخدامه في مشاريع C++ وPython وJava ولغات أخرى.
  • التوافق العكسي: يدعم Protobuf تطور مخطط البيانات: يمكنك إضافة حقول جديدة دون كسر الإصدارات القديمة من التطبيقات.

تثبيت protobuf لـ C++

للعمل مع protobuf في C++، تحتاج إلى تثبيت شيئين: مترجم protoc (يحول ملفات .proto إلى كود C++) ومكتبة protobuf نفسها لـ C++.

1. تثبيت مترجم protoc

أسهل طريقة هي تنزيل ملف ثنائي جاهز من صفحة الإصدارات الرسمية لـ protobuf على GitHub.

# مثال لنظام Linux (Ubuntu/Debian)
sudo apt-get install protobuf-compiler

# مثال لنظام macOS (عبر Homebrew)
brew install protobuf

# لنظام Windows: قم بتنزيل protoc-x.x.x-win64.zip وأضف مسار protoc.exe إلى متغير البيئة PATH

2. تثبيت مكتبة protobuf لـ C++

يوصى ببناء المكتبة من المصدر أو استخدام مدير الحزم.

# Ubuntu/Debian
sudo apt-get install libprotobuf-dev

# macOS (Homebrew)
brew install protobuf

# البناء من المصدر (طريقة عالمية)
git clone https://github.com/protocolbuffers/protobuf.git
cd protobuf
git submodule update --init --recursive
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -Dprotobuf_BUILD_TESTS=OFF ..
make -j$(nproc)
sudo make install

3. إعداد مشروع CMake (الطريقة الموصى بها)

أضف إلى ملف CMakeLists.txt الخاص بك:

find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})

# الترجمة التلقائية لملفات .proto
file(GLOB PROTO_FILES "*.proto")
protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})

add_executable(my_program main.cpp ${PROTO_SRCS})
target_link_libraries(my_program ${Protobuf_LIBRARIES})

بداية سريعة مع مثال كود

لننشئ مثالاً بسيطاً لتوضيح الأساسيات. سنحدد بنية بيانات لجهة اتصال.

الخطوة 1: إنشاء ملف .proto

ملف contact.proto:

syntax = "proto3";

package tutorial;

message Person {
  string name = 1;
  int32 age = 2;
  string email = 3;
}

الخطوة 2: إنشاء كود C++

protoc --cpp_out=. contact.proto

بعد تنفيذ الأمر، ستظهر ملفات contact.pb.h و contact.pb.cc.

الخطوة 3: كتابة كود C++

ملف main.cpp:

#include <iostream>
#include <fstream>
#include "contact.pb.h"

using namespace std;

int main() {
    // تأكد من تهيئة المكتبة
    GOOGLE_PROTOBUF_VERIFY_VERSION;

    // 1. إنشاء كائن Person وملؤه
    tutorial::Person per                    

توصيات