sgcWebSockets levert nu een native gRPC-client voor Delphi en C++Builder. Het nieuwe component TsgcGRPCClient spreekt gRPC over het eigen HTTP/2-transport van de bibliotheek, zodat er geen externe gRPC-runtime, geen C-bibliotheek en geen extra DLL's hoeven te worden uitgerold. Het maakt deel uit van de Enterprise-editie en draait op Windows, macOS, Linux, iOS en Android.
gRPC is niets meer dan Protocol Buffers-berichten verpakt over HTTP/2. sgcWebSockets beschikt al over een complete HTTP/2-stack, dus de gRPC-client bouwt er rechtstreeks op voort: hij framet uw aanvraagbytes, past de gRPC-headers en time-outs toe, en parseert de status en trailers terug naar getypeerde resultaten.
Gebouwd op het native HTTP/2-transport
Een gRPC-kanaal is een HTTP/2-verbinding. U maakt een TsgcHTTP2Client, wijst die naar de host en poort, en kent hem vervolgens toe aan de eigenschap Client van het gRPC-component. TLS wordt afgehandeld door de HTTP/2-client via OpenSSL of Windows SChannel.
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 de aanroeptypen
Het component ondersteunt elk gRPC-interactiepatroon, synchroon of asynchroon:
- Unair.
Callblokkeert en retourneert eenTsgcGRPCResponse;CallAsynckeert direct terug en activeertOnGRPCResponse. - Server-streaming.
ServerStreamingCallverstuurt één aanvraag en ontvangt een stroom berichten, die elkOnGRPCStreamMessageactiveren, metOnGRPCStreamEndbij de afsluiting. - Client-streaming.
OpenClientStream, daarnaSendStreamMessagevoor elk bericht, en vervolgensCloseClientStreamom het enkele antwoord te lezen. - Bidirectionele streaming.
OpenBidiStream,SendBidiMessageenCloseBidiStreamvoeren een full-duplex uitwisseling uit over één HTTP/2-stream.
Een respons bevat alles wat de aanroep heeft geretourneerd: StatusCode, StatusMessage, de ruwe Data-bytes (of DataString) en de Trailers.
Metadata, deadlines en kanaalopties
Aangepaste headers reizen mee via DefaultMetadata voor het hele kanaal, of per aanroep. Een time-out per aanroep wordt vertaald naar de standaard grpc-timeout-header, en CancelCall breekt een lopende stream af. Het kanaal zelf wordt afgestemd via ChannelOptions.
// gzip compression and channel limits
GRPC.ChannelOptions.Compression := grpcGzip;
GRPC.ChannelOptions.MaxMessageSize := 16 * 1024 * 1024;
// abort a long-running stream
GRPC.CancelCall(StreamId);
Interceptors, retry en observability
Een Interceptors-keten omhult elke aanroep, zodat u logging, auth-vernieuwing of tracing op één plek kunt toevoegen. RetryPolicy doet opnieuw een poging bij de statuscodes die u kiest, ServiceConfig past beleid per methode toe, en MetricsCollector registreert aanroeptellers en latenties.
GRPC.RetryPolicy.MaxAttempts := 4;
GRPC.RetryPolicy.RetryableStatusCodes :=
GRPC.RetryPolicy.RetryableStatusCodes + [grpcUNAVAILABLE];
Breng uw eigen Protocol Buffers mee
De client neemt en retourneert ruwe berichtbytes (TBytes), dus u zit niet vast aan één bepaalde Protocol Buffers-bibliotheek. Codeer uw aanvraag met de protobuf-tooling die u al gebruikt, geef de bytes door aan Call, en decodeer de responsbytes op dezelfde manier. Het component handelt de gRPC length-prefix framing, de compressievlag, de statuscodes en de trailers voor u af.
Google Cloud gRPC-API's inbegrepen
Bovenop de generieke client levert sgcWebSockets getypeerde clients voor de gRPC-services van Google Cloud: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery en Vertex AI. Zij handelen de service-accountauthenticatie en de aanvraag- en responsberichten af, zodat u methoden op hoog niveau aanroept in plaats van handmatig protobufs op te bouwen.
Beschikbaarheid
De gRPC-client is nu beschikbaar in de sgcWebSockets Enterprise-editie voor Delphi en C++Builder. Een kant-en-klaar voorbeeld is meegeleverd in Demos\21.GRPC\01.GRPC_Client, en de volledige referentie van eigenschappen, methoden en events vindt u op de productpagina van de gRPC-client.
Vragen, feedback of hulp bij het starten? Neem contact op. U krijgt antwoord van de mensen die de code hebben geschreven.
