sgcWebSockets liefert ab sofort einen nativen gRPC-Client für Delphi und C++Builder. Die neue Komponente TsgcGRPCClient spricht gRPC über den eigenen HTTP/2-Transport der Bibliothek, sodass es keine externe gRPC-Laufzeit, keine C-Bibliothek und keine zusätzlichen DLLs zum Ausliefern gibt. Sie ist Teil der Enterprise-Edition und läuft unter Windows, macOS, Linux, iOS und Android.
gRPC sind lediglich Protocol-Buffers-Nachrichten, die über HTTP/2 gerahmt werden. sgcWebSockets verfügt bereits über einen vollständigen HTTP/2-Stack, sodass der gRPC-Client direkt darauf aufbaut: Er rahmt Ihre Anfrage-Bytes, wendet die gRPC-Header und Timeouts an und parst den Status und die Trailers zurück in typisierte Ergebnisse.
Aufbauend auf dem nativen HTTP/2-Transport
Ein gRPC-Kanal ist eine HTTP/2-Verbindung. Sie erstellen einen TsgcHTTP2Client, richten ihn auf Host und Port aus und weisen ihn dann der Eigenschaft Client der gRPC-Komponente zu. TLS wird vom HTTP/2-Client über OpenSSL oder Windows SChannel gehandhabt.
uses
sgcHTTP2, sgcGRPC_Client, sgcGRPC_Classes, sgcGRPC_Types;
var
HTTP2: TsgcHTTP2Client;
GRPC: TsgcGRPCClient;
oResponse: TsgcGRPCResponse;
begin
HTTP2 := TsgcHTTP2Client.Create(nil);
HTTP2.Host := 'grpc.example.com';
HTTP2.Port := 443;
HTTP2.TLS := True;
GRPC := TsgcGRPCClient.Create(nil);
GRPC.Client := HTTP2;
// metadata is sent on every call (auth, tracing...)
GRPC.DefaultMetadata.Add('authorization', 'Bearer eyJ...');
// unary call: the request is your serialized protobuf message as TBytes
oResponse := GRPC.Call('helloworld.Greeter', 'SayHello', RequestBytes);
if oResponse.StatusCode = grpcOK then
Memo1.Text := oResponse.DataString
else
ShowMessage('gRPC error: ' + oResponse.StatusMessage);
end;
Alle vier Aufruftypen
Die Komponente unterstützt jedes gRPC-Interaktionsmuster, synchron oder asynchron:
- Unär.
Callblockiert und gibt eineTsgcGRPCResponsezurück;CallAsynckehrt sofort zurück und löstOnGRPCResponseaus. - Server-Streaming.
ServerStreamingCallsendet eine Anfrage und empfängt einen Strom von Nachrichten, von denen jedeOnGRPCStreamMessageauslöst, mitOnGRPCStreamEndbeim Abschluss. - Client-Streaming.
OpenClientStream, dannSendStreamMessagefür jede Nachricht, dannCloseClientStream, um die einzelne Antwort zu lesen. - Bidirektionales Streaming.
OpenBidiStream,SendBidiMessageundCloseBidiStreamführen einen Vollduplex-Austausch über einen HTTP/2-Stream durch.
Eine Antwort enthält alles, was der Aufruf zurückgegeben hat: StatusCode, StatusMessage, die rohen Data-Bytes (oder DataString) und die Trailers.
Metadaten, Deadlines und Kanaloptionen
Benutzerdefinierte Header werden über DefaultMetadata für den gesamten Kanal oder pro Aufruf übermittelt. Ein Timeout pro Aufruf wird in den Standard-Header grpc-timeout übersetzt, und CancelCall bricht einen laufenden Stream ab. Der Kanal selbst wird über ChannelOptions abgestimmt.
// gzip compression and channel limits
GRPC.ChannelOptions.Compression := grpcGzip;
GRPC.ChannelOptions.MaxMessageSize := 16 * 1024 * 1024;
// abort a long-running stream
GRPC.CancelCall(StreamId);
Interceptors, Wiederholung und Observability
Eine Interceptors-Kette umschließt jeden Aufruf, sodass Sie Logging, Auth-Aktualisierung oder Tracing an einer Stelle hinzufügen können. RetryPolicy wiederholt bei den von Ihnen gewählten Statuscodes, ServiceConfig wendet Richtlinien pro Methode an, und MetricsCollector zeichnet Aufrufzähler und Latenzen auf.
GRPC.RetryPolicy.MaxAttempts := 4;
GRPC.RetryPolicy.RetryableStatusCodes :=
GRPC.RetryPolicy.RetryableStatusCodes + [grpcUNAVAILABLE];
Bringen Sie Ihre eigenen Protocol Buffers mit
Der Client nimmt rohe Nachrichten-Bytes (TBytes) entgegen und gibt sie zurück, sodass er Sie nicht an eine bestimmte Protocol-Buffers-Bibliothek bindet. Kodieren Sie Ihre Anfrage mit dem Protobuf-Werkzeug, das Sie bereits verwenden, übergeben Sie die Bytes an Call und dekodieren Sie die Antwort-Bytes auf dieselbe Weise. Die Komponente übernimmt für Sie das gRPC-Längenpräfix-Framing, das Komprimierungs-Flag, die Statuscodes und die Trailers.
Google-Cloud-gRPC-APIs inklusive
Zusätzlich zum generischen Client liefert sgcWebSockets typisierte Clients für die gRPC-Dienste von Google Cloud: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery und Vertex AI. Sie übernehmen die Dienstkonto-Authentifizierung sowie die Anfrage- und Antwortnachrichten, sodass Sie übergeordnete Methoden aufrufen, anstatt Protobufs von Hand zu erstellen.
Verfügbarkeit
Der gRPC-Client ist ab sofort in der Enterprise-Edition von sgcWebSockets für Delphi und C++Builder verfügbar. Ein einsatzbereites Beispiel ist in Demos\21.GRPC\01.GRPC_Client enthalten, und die vollständige Referenz zu Eigenschaften, Methoden und Ereignissen finden Sie auf der Produktseite des gRPC-Clients.
Fragen, Feedback oder Hilfe beim Einstieg? Nehmen Sie Kontakt auf. Sie erhalten eine Antwort von den Leuten, die den Code geschrieben haben.
