Was ist gRPC und warum wird es benötigt?
gRPC (gRPC Remote Procedure Calls) ist ein leistungsstarkes, quelloffenes Framework für entfernte Prozeduraufrufe (RPC), das von Google entwickelt wurde. Es ermöglicht einer Client-Anwendung, Methoden auf einer Server-Anwendung direkt aufzurufen, als wäre es ein lokales Objekt. Das vereinfacht die Erstellung verteilter Systeme und Microservices erheblich.
Die Grundlage von gRPC bildet Protocol Buffers (protobuf) – ein leistungsfähiger Mechanismus zur Serialisierung strukturierter Daten. Sie definieren die Datenstruktur und den Dienst in einer .proto-Datei, und der Compiler protoc generiert daraus den Code für die gewünschten Sprachen (in unserem Fall C++).
Die wichtigsten Vorteile von gRPC:
- Hohe Leistung: Nutzt HTTP/2 für das Multiplexing von Anfragen und das binäre Protobuf-Format – deutlich schneller als JSON/XML.
- Starke Typisierung: Verträge zwischen Diensten sind in
.proto-Dateien klar definiert. - Streaming-Unterstützung: Bietet Server-Streaming, Client-Streaming und bidirektionales Streaming.
- Mehrsprachigkeit: Generiert Clients und Server für C++, Java, Python, Go, C#, Ruby und viele weitere Sprachen.
- Integrierte Authentifizierung und Verschlüsselung: Unterstützt TLS/SSL und Interceptors.
Die gRPC-Bibliothek für C++ ist eine native Implementierung, die maximale Kontrolle über Speicher und Leistung bietet. Das ist besonders wichtig für hochlastige Systeme, Spieleserver, Finanzanwendungen und IoT.
gRPC für C++ installieren
Die Installation von gRPC für C++ ist aufwändiger als für Python, da sie eine Kompilierung aus dem Quellcode oder die Nutzung des Paketmanagers vcpkg erfordert. Wir zeigen Ihnen die zwei wichtigsten Methoden.
Methode 1: Installation über vcpkg (empfohlen)
vcpkg ist ein plattformübergreifender Paketmanager für C++ von Microsoft.
# 1. vcpkg klonen
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
# 2. vcpkg installieren (Windows: bootstrap-vcpkg.bat)
./bootstrap-vcpkg.sh
# 3. In das System integrieren (für Visual Studio oder CMake)
./vcpkg integrate install
# 4. gRPC installieren (inklusive protobuf und Abhängigkeiten)
./vcpkg install grpc
Nach der Installation muss das gefundene Paket in Ihrer CMakeLists.txt eingebunden werden:
find_package(gRPC CONFIG REQUIRED)
find_package(Protobuf CONFIG REQUIRED)
target_link_libraries(my_target
gRPC::grpc++
gRPC::grpc++_reflection
protobuf::libprotobuf
)
Methode 2: Aus dem Quellcode kompilieren (Linux/macOS)
Diese Methode bietet mehr Kontrolle, erfordert aber die Installation von Abhängigkeiten (cmake, openssl, zlib, abseil).
# Repository mit Submodulen klonen
git clone --recurse-submodules -b v1.62.0 https://github.com/grpc/grpc
cd grpc
# Build-Ordner erstellen
mkdir -p cmake/build
cd cmake/build
# Konfigurieren und bauen
cmake ../.. -DgRPC_INSTALL=ON \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
Schnellstart: "Hello World"-Beispiel
Wir erstellen eine einfache Anwendung, die einen Benutzernamen entgegennimmt und eine Begrüßung zurückgibt.
Schritt 1: Dienst in der .proto-Datei definieren
Erstellen Sie die Datei hello.proto:
syntax = "proto3";
package helloworld;
// Nachricht für die Anfrage definieren
message HelloRequest {
string name = 1;
}
// Nachricht für die Antwort definieren
message HelloReply {
string message = 1;
}
// RPC-Dienst definieren
service Greeter {
// Unärer RPC: eine Anfrage -> eine Antwort
rpc SayHello (HelloRequest) returns (HelloReply);
}
Schritt 2: C++-Code generieren
protoc --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` hello.proto
protoc --cpp_out=. hello.proto
Dies erstellt