Introduction à gRPC pour C++
\n\ngRPC est un framework moderne d'appel de procédure à distance (RPC) développé par Google. Il utilise Protocol Buffers (protobuf) pour la sérialisation des données et HTTP/2 comme protocole de transport. Pour le langage C++, gRPC fournit des bibliothèques natives permettant de créer des microservices haute performance et des systèmes distribués.
\n\nDans cet article, nous allons examiner les bibliothèques principales, la configuration de l'environnement et écrire un exemple complet d'application client-serveur en C++.
\n\nBibliothèques principales de gRPC pour C++
\n\nPour travailler avec gRPC en C++, plusieurs composants doivent être installés :
\n\n- \n
- grpc — la bibliothèque principale contenant les implémentations du serveur et du client. \n
- grpc++ — une surcouche C++ pour gRPC offrant une API pratique. \n
- protobuf — la bibliothèque pour travailler avec Protocol Buffers (génération de classes, sérialisation/désérialisation). \n
- grpc_cpp_plugin — le plugin pour le compilateur protoc qui génère du code C++ à partir des fichiers .proto. \n
Des dépendances peuvent également être nécessaires : abseil-cpp, openssl, zlib et c-ares.
Installation de gRPC et protobuf
\n\nLa méthode recommandée est la compilation à partir des sources via CMake. Exemple pour Linux/macOS :
\n\ngit clone --recurse-submodules -b v1.60.0 https://github.com/grpc/grpc\ncd grpc\nmkdir build && cd build\ncmake .. -DgRPC_INSTALL=ON -DCMAKE_INSTALL_PREFIX=/usr/local\nmake -j$(nproc)\nsudo make install\n\nAprès l'installation, vérifiez la disponibilité du compilateur protobuf et du plugin :
\n\nprotoc --version\nwhich grpc_cpp_plugin\n\nDéfinition du service via un fichier .proto
\n\nCréons un fichier example.proto :
syntax = "proto3";\n\npackage example;\n\nservice Greeter {\n rpc SayHello (HelloRequest) returns (HelloReply);\n}\n\nmessage HelloRequest {\n string name = 1;\n}\n\nmessage HelloReply {\n string message = 1;\n}\n\nGénérons le code C++ :
\n\nprotoc --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` example.proto\n\nEn conséquence, les fichiers suivants apparaissent : example.pb.h, example.pb.cc, example.grpc.pb.h, example.grpc.pb.cc.
Implémentation du serveur en C++
\n\nCréez un fichier server.cc :
#include <iostream>\n#include <memory>\n#include <string>\n\n#include <grpcpp/grpcpp.h>\n#include "example.grpc.pb.h"\n\nusing grpc::Server;\nusing grpc::ServerBuilder;\nusing grpc::ServerContext;\nusing grpc::Status;\nusing example::Greeter;\nusing example::HelloRequest;\nusing example::HelloReply;\n\nclass GreeterServiceImpl final : public Greeter::Service {\n Status SayHello(ServerContext* context,\n const HelloRequest* request,\n HelloReply* reply) override {\n std::string prefix("Hello, ");\n reply->set_message(prefix + request->name());\n return Status::OK;\n }\n};\n\nvoid RunServer() {\n std::string server_address("0.0.0.0:50051");\n GreeterServiceImpl service;\n\n ServerBuilder builder;\n builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());\n builder.RegisterService(&service);\n\n std::unique_ptr<Server> server(builder.BuildAndStart());\n std::cout << "Server listening on " << server_address << std::endl;\n server->Wait();\n}\n\nint main() {\n RunServer();\n return 0;\n}\n\nImplémentation du client en C++
\n\nCréez un fichier client.cc :
#include <iostream>\n#include <memory>\n#include <string>\n\n#include <grpcpp/grpcpp.h>\n#include "example.grpc.pb.h"\n\nusing grpc::Channel;\nusing grpc::ClientContext;\nusing grpc::Status;\nusing example::Gree Aussi dans la bibliothèque
Client HTTP pour C++ : top bibliothèques pour travailler avec le réseau
Swagger/OpenAPI pour C# (.NET) : Génération et documentation d'API
PHPMailer pour PHP : guide complet avec exemples