विषय पर बढ़ें

अंतिम अद्यतन: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 उपयोग किया जा सकता है, एक बार इंस्टॉल में कोई समस्या नहीं आती।

इंस्टॉल का तरीका:

git clone -b v1.57.0 git@github.com:grpc/grpc.git

फिर submodule initialize करें

git submodule update --init

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 करें, उदाहरण के लिए:

export PATH=/usr/local/grpc/bin:$PATH

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 करें:

[light@i-i339drlk build]$ ./server 
Server listening on port: 0.0.0.0:5000

Client run करें:

[light@i-i339drlk build]$ ./client 
Original string: hello world grpc!
Reversed string: !cprg dlrow olleh

संबंधित विषय

टिप्पणियाँ