अंतिम अद्यतन:2026-10-12
C++ gRPC छोटा project¶
C++那些事 का grpc छोटा Demo¶
github पर काफी लोकप्रिय rpc हैं grpc, brpc, और Tencent के अंदरूनी काफी ताकतवर trpc आदि, ये rpc अलग-अलग भाषाओं और platforms का समर्थन करते हैं। आज बात करते हैं कि grpc का उपयोग कैसे करें, एक सरल demo से शुरुआत करते हुए, पूरा project CMake से build होता है, एक बिल्कुल standard rpc project management, सारा code 星球 पर अपडेट किया जा चुका है, पाने का तरीका अंत में दिए QR code में।
1. Step by Step environment¶
अगर आपका computer mac है, तो खेद है, फिलहाल latest version का grpc उपयोग नहीं हो पाएगा, latest version के grpc में abseil उपयोग हुआ है, compile में समस्या आती है, official रूप से अभी solve नहीं हुआ है, अगर किसी को हल पता हो तो comment करें, मुझे अभी तक हल नहीं मिला है।
इसलिए, अपने mac पर grpc का कम version इंस्टॉल करने की सलाह है, या सीधे linux पर इंस्टॉल करें, linux पर latest version grpc उपयोग किया जा सकता है, एक बार इंस्टॉल में कोई समस्या नहीं आती।
इंस्टॉल का तरीका:
फिर submodule initialize करें
cmake से compile और install:
cd cmake
mkdir build
cd build
cmake -DgRPC_INSTALL=ON -DgRPC_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local/grpc ../..
make -j8
make -j8 install // root 权限
आप ऊपर का install directory बदल सकते हैं, ध्यान दें install के समय root permission चाहिए।
इंस्टॉल के बाद, अपनी bin directory को path में configure करें, उदाहरण के लिए:
2. String reverse Demo¶
Environment तैयार होने के बाद, हम काम शुरू कर सकते हैं।
2.1 Protocol¶
पहला काम rpc protocol तय करना है:
syntax = "proto3";
package stringreverse;
service StringReverse {
rpc sendRequest (StringRequest) returns (StringReply) {}
}
message StringRequest {
string original = 1;
}
message StringReply {
string reversed = 1;
}
बहुत सरल protocol, एक string request, एक string return।
2.2 Client¶
rpc request string construct करें, फिर sendRequest interface call करके भेज दें।
std::string str = "hello world grpc!";
std::cout << "Original string: " << str << std::endl;
StringRequest request;
StringReply reply;
ClientContext context;
request.set_original(str);
Status status = stub->sendRequest(&context, request, &reply);
if (status.ok()) {
std::cout << "Reversed string: " << reply.reversed() << std::endl;
}
// do something
2.3 Server¶
Service को inherit करके string reverse का logic implement करें।
class ReverseServiceImplementation final : public StringReverse::Service {
Status sendRequest(ServerContext* context, const StringRequest* request,
StringReply* reply) override {
// 反转逻辑
}
}
अंत में service register कर दें:
builder.RegisterService(&service);
std::unique_ptr<Server> server(builder.BuildAndStart());
std::cout << "Server listening on port: " << server_address << std::endl;
3. Run¶
Build directory बनाएँ:
mkdir build
cmake ..
# 输出
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /opt/rh/devtoolset-10/root/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /opt/rh/devtoolset-10/root/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found Protobuf: /usr/local/grpc/bin/protoc-23.4.0 (found version "23.4.0")
-- Using protobuf
-- Using gRPC 1.57.0
-- Configuring done
-- Generating done
-- Build files have been written to: /code/stringreverse/build
make से compile:
[ 10%] Generating stringreverse.pb.cc, stringreverse.pb.h, stringreverse.grpc.pb.cc, stringreverse.grpc.pb.h
Scanning dependencies of target server
[ 20%] Building CXX object CMakeFiles/server.dir/server.cc.o
[ 30%] Building CXX object CMakeFiles/server.dir/stringreverse.pb.cc.o
[ 40%] Building CXX object CMakeFiles/server.dir/stringreverse.grpc.pb.cc.o
[ 50%] Linking CXX executable server
[ 50%] Built target server
Scanning dependencies of target client
[ 60%] Building CXX object CMakeFiles/client.dir/client.cc.o
[ 70%] Building CXX object CMakeFiles/client.dir/stringreverse.pb.cc.o
[ 80%] Building CXX object CMakeFiles/client.dir/stringreverse.grpc.pb.cc.o
[ 90%] Linking CXX executable client
[100%] Built target client
Server run करें:
Client run करें:
[light@i-i339drlk build]$ ./client
Original string: hello world grpc!
Reversed string: !cprg dlrow olleh
संबंधित विषय¶
- खुद C++ FnOnce लिखना | C++那些事
- C++ inter-process communication व्यवहार | C++那些事
- C++ short URL service Demo | C++那些事
- C++17 और SQLite से directory का size निकालना | C++那些事
- Google Benchmark performance testing | C++那些事
- C++20 coroutine HTTP server | C++那些事
- Protobuf ZeroCopy serialization | C++那些事
- pybind11 से Python तेज़ करना | C++那些事
- C++ stack calculator design | C++那些事