Klient gRPC dla Delphi

· Komponenty

sgcWebSockets zawiera teraz natywnego klienta gRPC dla Delphi i C++Builder. Nowy komponent TsgcGRPCClient komunikuje się przez gRPC za pomocą własnego transportu HTTP/2 biblioteki, więc nie ma zewnętrznego środowiska uruchomieniowego gRPC, biblioteki C ani dodatkowych bibliotek DLL do wdrożenia. Jest częścią edycji Enterprise i działa na Windows, macOS, Linux, iOS oraz Android.

gRPC to po prostu komunikaty Protocol Buffers umieszczone w ramkach przesyłanych przez HTTP/2. sgcWebSockets ma już kompletny stos HTTP/2, więc klient gRPC budowany jest bezpośrednio na nim: pakuje bajty żądania w ramki, stosuje nagłówki i limity czasu gRPC oraz parsuje status i trailery z powrotem na typowane wyniki.

Zbudowany na natywnym transporcie HTTP/2

Kanał gRPC to połączenie HTTP/2. Tworzysz TsgcHTTP2Client, kierujesz go na host i port, a następnie przypisujesz go do właściwości Client komponentu gRPC. TLS jest obsługiwany przez klienta HTTP/2 za pośrednictwem OpenSSL lub 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;

Wszystkie cztery typy wywołań

Komponent obsługuje każdy wzorzec interakcji gRPC, synchronicznie lub asynchronicznie:

Odpowiedź niesie wszystko, co zwróciło wywołanie: StatusCode, StatusMessage, surowe bajty Data (lub DataString) oraz Trailers.

Metadane, terminy i opcje kanału

Niestandardowe nagłówki podróżują przez DefaultMetadata dla całego kanału lub dla pojedynczego wywołania. Limit czasu dla pojedynczego wywołania jest tłumaczony na standardowy nagłówek grpc-timeout, a CancelCall przerywa strumień w trakcie realizacji. Sam kanał jest dostrajany poprzez ChannelOptions.

// gzip compression and channel limits
GRPC.ChannelOptions.Compression := grpcGzip;
GRPC.ChannelOptions.MaxMessageSize := 16 * 1024 * 1024;

// abort a long-running stream
GRPC.CancelCall(StreamId);

Interceptory, ponawianie i obserwowalność

Łańcuch Interceptors opakowuje każde wywołanie, dzięki czemu możesz dodać logowanie, odświeżanie uwierzytelniania lub śledzenie w jednym miejscu. RetryPolicy ponawia próby dla wybranych przez Ciebie kodów statusu, ServiceConfig stosuje politykę dla poszczególnych metod, a MetricsCollector rejestruje liczniki wywołań i opóźnienia.

GRPC.RetryPolicy.MaxAttempts := 4;
GRPC.RetryPolicy.RetryableStatusCodes :=
  GRPC.RetryPolicy.RetryableStatusCodes + [grpcUNAVAILABLE];

Użyj własnych Protocol Buffers

Klient przyjmuje i zwraca surowe bajty komunikatu (TBytes), więc nie wiąże Cię z żadną pojedynczą biblioteką Protocol Buffers. Zakoduj swoje żądanie za pomocą dowolnego narzędzia protobuf, którego już używasz, przekaż bajty do Call i zdekoduj bajty odpowiedzi w ten sam sposób. Komponent zajmuje się za Ciebie ramkowaniem z prefiksem długości gRPC, flagą kompresji, kodami statusu i trailerami.

Dołączone interfejsy API gRPC Google Cloud

Oprócz klienta ogólnego sgcWebSockets dostarcza typowanych klientów dla usług gRPC Google Cloud: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery i Vertex AI. Obsługują one uwierzytelnianie konta usługi oraz komunikaty żądań i odpowiedzi, więc wywołujesz metody wysokiego poziomu zamiast ręcznie budować protobufy.

Dostępność

Klient gRPC jest już dostępny w edycji sgcWebSockets Enterprise dla Delphi i C++Builder. Gotowy do uruchomienia przykład jest dołączony w Demos\21.GRPC\01.GRPC_Client, a pełny opis właściwości, metod i zdarzeń znajduje się na stronie produktu klienta gRPC.

Pytania, opinie lub pomoc na początek? Skontaktuj się z nami. Otrzymasz odpowiedź od osób, które napisały ten kod.