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:
- Unary.
Callblokuje i zwracaTsgcGRPCResponse;CallAsynczwraca natychmiast i wywołujeOnGRPCResponse. - Server streaming.
ServerStreamingCallwysyła jedno żądanie i odbiera strumień komunikatów, z których każdy wywołujeOnGRPCStreamMessage, a na zakończeniuOnGRPCStreamEnd. - Client streaming.
OpenClientStream, następnieSendStreamMessagedla każdego komunikatu, a potemCloseClientStream, aby odczytać pojedynczą odpowiedź. - Bidirectional streaming.
OpenBidiStream,SendBidiMessageiCloseBidiStreamrealizują wymianę w trybie pełnego dupleksu przez jeden strumień HTTP/2.
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.
