Einführung in gRPC für C++
\n\ngRPC ist ein modernes Framework für entfernte Prozeduraufrufe (RPC), entwickelt von Google. Es verwendet Protocol Buffers (protobuf) zur Datenserialisierung und HTTP/2 als Transportprotokoll. Für die Sprache C++ bietet gRPC native Bibliotheken, mit denen Sie leistungsstarke Microservices und verteilte Systeme erstellen können.
\n\nIn diesem Artikel werden wir die wichtigsten Bibliotheken, die Einrichtung der Umgebung besprechen und ein vollständiges Beispiel einer Client-Server-Anwendung in C++ schreiben.
\n\nWichtige gRPC-Bibliotheken für C++
\n\nFür die Arbeit mit gRPC in C++ müssen mehrere Komponenten installiert werden:
\n\n- \n
- grpc — die Hauptbibliothek, die Implementierungen von Server und Client enthält. \n
- grpc++ — C++-Wrapper um gRPC, der eine praktische API bereitstellt. \n
- protobuf — Bibliothek für die Arbeit mit Protocol Buffers (Generierung von Klassen, Serialisierung/Deserialisierung). \n
- grpc_cpp_plugin — Plugin für den Compiler protoc, der C++-Code aus .proto-Dateien generiert. \n
Möglicherweise werden auch Abhängigkeiten benötigt: abseil-cpp, openssl, zlib und c-ares.
Installation von gRPC und protobuf
\n\nDie empfohlene Methode ist die Kompilierung aus den Quellen mit CMake. Beispiel für 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\nÜberprüfen Sie nach der Installation die Verfügbarkeit des protobuf-Compilers und des Plugins:
\n\nprotoc --version\nwhich grpc_cpp_plugin\n\nDefinition des Dienstes über die .proto-Datei
\n\nErstellen wir eine Datei 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\nGenerieren wir den C++-Code:
\n\nprotoc --cpp_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` example.proto\n\nAls Ergebnis erscheinen die Dateien: example.pb.h, example.pb.cc, example.grpc.pb.h, example.grpc.pb.cc.
Implementierung des Servers in C++
\n\nErstellen Sie eine Datei 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\nImplementierung des Clients in C++
\n\nErstellen Sie eine Datei 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 Auch in der Bibliothek
Event Bus und das Observer-Pattern in Java: Implementierung einer lose gekoppelten Architektur
Reaktive Programmierung in Go (Golang): Bibliotheken, Muster und Beispiele
Flipper für Kotlin: Komplettguide mit Beispielen
ORM für Swift (iOS/macOS): Vergleich und Anwendungsbeispiele
Arbeiten mit Bildern in Go (Golang): Bibliotheken und Beispiele