C++ के लिए gRPC: लाइब्रेरीज़, उदाहरण और व्यावहारिक गाइड
gRPC एक आधुनिक, उच्च-प्रदर्शन वाला रिमोट प्रोसीजर कॉल (RPC) फ्रेमवर्क है, जिसे Google द्वारा विकसित किया गया है। यह विभिन्न भाषाओं (C++, Python, Go, Java सहित) में क्लाइंट और सर्वर एप्लिकेशन को एक-दूसरे से इस तरह संवाद करने की अनुमति देता है जैसे कि वे स्थानीय फ़ंक्शन कॉल हों। C++ के लिए, gRPC Protocol Buffers (protobuf) पर आधारित एक शक्तिशाली, सख्ती से टाइप किया गया इंटरफ़ेस प्रदान करता है, जो इसे माइक्रोसर्विसेज़ और वितरित सिस्टम बनाने के लिए एक आदर्श विकल्प बनाता है।
इस लेख में, हम प्रमुख लाइब्रेरीज़, स्थापना प्रक्रिया पर चर्चा करेंगे और C++ में एक पूर्ण gRPC सर्वर और क्लाइंट का उदाहरण लिखेंगे।
C++ में gRPC के लिए प्रमुख लाइब्रेरीज़
C++ में gRPC के साथ काम करने के लिए आपको निम्नलिखित घटकों की आवश्यकता होगी:
- grpc (libgrpc++) — मुख्य gRPC लाइब्रेरी। इसमें ट्रांसपोर्ट लेयर (HTTP/2), चैनल, सर्वर और एसिंक्रोनस स्टैक का कार्यान्वयन शामिल है।
- protobuf (libprotobuf) — संरचित डेटा के सीरियलाइज़ेशन के लिए लाइब्रेरी। यह संदेश प्रारूप (.proto फ़ाइलें) को परिभाषित करता है और C++ कोड उत्पन्न करता है।
- grpc++ (libgrpc++_unsecure या libgrpc++_reflection) — gRPC के लिए उच्च-स्तरीय C++ रैपर। यह सेवाओं के लिए सिंक्रोनस और एसिंक्रोनस API प्रदान करता है।
- grpc_cpp_plugin — protobuf कंपाइलर (
protoc) के लिए प्लगइन, जो gRPC सर्वर और क्लाइंट के लिए C++ कोड उत्पन्न करता है। - abseil-cpp — Google की लाइब्रेरी, जिसका उपयोग gRPC स्ट्रिंग्स, थ्रेड्स और सिंक्रोनाइज़ेशन के लिए करता है (अक्सर स्वचालित रूप से जुड़ जाती है)।
स्थापना और कॉन्फ़िगरेशन
स्थापना का अनुशंसित तरीका स्रोत से बिल्ड करना या vcpkg/conan पैकेज मैनेजर का उपयोग करना है। हम vcpkg के माध्यम से स्थापना दिखाते हैं:
# vcpkg स्थापित करना (यदि पहले से स्थापित नहीं है)git clone https://github.com/Microsoft/vcpkg.gitcd vcpkg./bootstrap-vcpkg.sh
# C++ समर्थन के साथ gRPC स्थापित करना./vcpkg install grpc[ssl]स्थापना के बाद, CMakeLists.txt में लाइब्रेरीज़ को लिंक करें:
cmake_minimum_required(VERSION 3.15)project(GrpcExample CXX)
set(CMAKE_CXX_STANDARD 17)find_package(gRPC CONFIG REQUIRED)find_package(Protobuf CONFIG REQUIRED)
# proto फ़ाइलें जनरेट करनाset(PROTO_FILE proto/hello.proto)set(GENERATED_PROTO_SRC ${CMAKE_CURRENT_BINARY_DIR}/hello.pb.cc)set(GENERATED_PROTO_HDR ${CMAKE_CURRENT_BINARY_DIR}/hello.pb.h)set(GENERATED_GRPC_SRC ${CMAKE_CURRENT_BINARY_DIR}/hello.grpc.pb.cc)set(GENERATED_GRPC_HDR ${CMAKE_CURRENT_BINARY_DIR}/hello.grpc.pb.h)
add_custom_command( OUTPUT ${GENERATED_PROTO_SRC} ${GENERATED_PROTO_HDR} ${GENERATED_GRPC_SRC} ${GENERATED_GRPC_HDR} COMMAND protobuf::protoc ARGS --grpc_out ${CMAKE_CURRENT_BINARY_DIR} --cpp_out ${CMAKE_CURRENT_BINARY_DIR} --plugin=protoc-gen-grpc=$<TARGET_FILE:gRPC::grpc_cpp_plugin> -I ${CMAKE_CURRENT_SOURCE_DIR}/proto ${CMAKE_CURRENT_SOURCE_DIR}/${PROTO_FILE} DEPENDS ${PROTO_FILE} COMMENT "proto फ़ाइलों से gRPC कोड जनरेट किया जा रहा है")add_library(generated_proto ${GENERATED_PROTO_SRC} ${GENERATED_GRPC_SRC})target_include_directories(generated_proto PUBLIC ${CMAKE_CURRENT_BINARY_DIR})target_link_libraries(generated_proto gRPC::grpc++ protobuf::libprotobuf).proto फ़ाइल बनाना
पहले, hello.proto फ़ाइल में सेवा और संदेशों को परिभाषित करें:
syntax = "proto3";
package hello;
// अनुरोध: नाम भेजेंmessage HelloRequest { string name = 1;}
// उत्तर: अभिवादन प्राप्त करेंmessage HelloReply { string message = 1;}
// gRPC सेवा परिभाषित करेंservice Greeter { // Unary RPC (एक अनुरोध — एक उत्तर) rpc SayHello (HelloRequest) returns (HelloReply);}C++ में सर्वर का कार्यान्वयन
एक फ़ाइल बनाएं se