C++ के लिए gRPC का परिचय
gRPC एक आधुनिक RPC (Remote Procedure Call) फ्रेमवर्क है, जिसे Google ने विकसित किया है। यह डेटा सीरियलाइजेशन के लिए Protocol Buffers (protobuf) और ट्रांसपोर्ट प्रोटोकॉल के रूप में HTTP/2 का उपयोग करता है। C++ भाषा के लिए gRPC नेटिव लाइब्रेरी प्रदान करता है, जिससे आप हाई-परफॉर्मेंस माइक्रोसर्विसेज और डिस्ट्रीब्यूटेड सिस्टम बना सकते हैं।
इस लेख में, हम मुख्य लाइब्रेरी, एनवायरनमेंट सेटअप और C++ में एक पूर्ण क्लाइंट-सर्वर एप्लिकेशन का उदाहरण देखेंगे।
C++ के लिए मुख्य gRPC लाइब्रेरी
C++ में gRPC के साथ काम करने के लिए कई कंपोनेंट्स इंस्टॉल करने होते हैं:
- grpc — मुख्य लाइब्रेरी, जिसमें सर्वर और क्लाइंट का इम्प्लीमेंटेशन है।
- grpc++ — gRPC के ऊपर C++ रैपर, जो एक सुविधाजनक API प्रदान करता है।
- protobuf — Protocol Buffers के साथ काम करने की लाइब्रेरी (क्लास जनरेशन, सीरियलाइजेशन/डीसीरियलाइजेशन)।
- grpc_cpp_plugin — protoc कंपाइलर के लिए प्लगइन, जो .proto फाइलों से C++ कोड जनरेट करता है।
इसके अलावा, कुछ डिपेंडेंसी की भी आवश्यकता हो सकती है: abseil-cpp, openssl, zlib और c-ares।
gRPC और protobuf की स्थापना
अनुशंसित तरीका CMake के माध्यम से सोर्स कोड से बिल्ड करना है। Linux/macOS के लिए उदाहरण:
git clone --recurse-submodules -b v1.60.0 https://github.com/grpc/grpc
cd grpc
mkdir build && cd build
cmake .. -DgRPC_INSTALL=ON -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
इंस्टॉलेशन के बाद, protobuf कंपाइलर और प्लगइन की उपलब्धता जांचें:
protoc --version
which grpc_cpp_plugin
.proto फाइल के माध्यम से सर्विस डिफाइन करना
एक example.proto फाइल बनाएं:
syntax = "proto3";
package example;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
C++ कोड जनरेट करें:
protoc --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` example.proto
इसके परिणामस्वरूप ये फाइलें बनेंगी: example.pb.h, example.pb.cc, example.grpc.pb.h, example.grpc.pb.cc।
C++ में सर्वर का इम्प्लीमेंटेशन
server.cc फाइल बनाएं:
#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "example.grpc.pb.h"
using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using example::Greeter;
using example::HelloRequest;
using example::HelloReply;
class GreeterServiceImpl final : public Greeter::Service {
Status SayHello(ServerContext* context,
const HelloRequest* request,
HelloReply* reply) override {
std::string prefix("Hello, ");
reply->set_message(prefix + request->name());
return Status::OK;
}
};
void RunServer() {
std::string server_address("0.0.0.0:50051");
GreeterServiceImpl service;
ServerBuilder builder;
builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
builder.RegisterService(&service);
std::unique_ptr<Server> server(builder.BuildAndStart());
std::cout << "Server listening on " << server_address << std::endl;
server->Wait();
}
int main() {
RunServer();
return 0;
}
C++ में क्लाइंट का इम्प्लीमेंटेशन
client.cc फाइल बनाएं:
#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "example.grpc.pb.h"
using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using example::Greeter;
using example::HelloRequest;
using example::HelloReply;
class GreeterClient {
public:
GreeterClient(std::shared_p पुस्तकालय में भी
जावा में प्राधिकरण और प्रमाणीकरण: स्प्रिंग सिक्योरिटी और JWT
जावा में इमेज प्रोसेसिंग: लाइब्रेरी, टूल्स और कोड उदाहरण
जावास्क्रिप्ट (Node.js) के लिए OAuth क्लाइंट: अवलोकन और उपयोग के उदाहरण