gRPC-client voor Delphi

· Componenten

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:

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.