Delphi için gRPC İstemcisi

· Bileşenler

sgcWebSockets artık Delphi ve C++Builder için yerel bir gRPC istemcisi içeriyor. Yeni TsgcGRPCClient bileşeni, gRPC'yi kütüphanenin kendi HTTP/2 taşıması üzerinden konuşur; bu nedenle dağıtılacak harici bir gRPC çalışma zamanı, C kütüphanesi ve ek DLL yoktur. Enterprise sürümünün bir parçasıdır ve Windows, macOS, Linux, iOS ve Android üzerinde çalışır.

gRPC, yalnızca HTTP/2 üzerinde çerçevelenmiş Protocol Buffers mesajlarıdır. sgcWebSockets zaten eksiksiz bir HTTP/2 yığınına sahiptir, bu nedenle gRPC istemcisi doğrudan onun üzerine inşa edilir: istek baytlarınızı çerçeveler, gRPC üst bilgilerini ve zaman aşımlarını uygular ve durumu ile trailer'ları türlü sonuçlara geri ayrıştırır.

Yerel HTTP/2 taşıması üzerine kurulu

Bir gRPC kanalı, bir HTTP/2 bağlantısıdır. Bir TsgcHTTP2Client oluşturursunuz, onu ana bilgisayara ve bağlantı noktasına yönlendirir, ardından gRPC bileşeninin Client özelliğine atarsınız. TLS, HTTP/2 istemcisi tarafından OpenSSL veya Windows SChannel aracılığıyla işlenir.

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;

Dört çağrı türünün tümü

Bileşen, senkron veya asenkron her gRPC etkileşim desenini destekler:

Bir yanıt, çağrının döndürdüğü her şeyi taşır: StatusCode, StatusMessage, ham Data baytları (veya DataString) ve Trailers.

Meta veriler, son tarihler ve kanal seçenekleri

Özel üst bilgiler, tüm kanal için veya çağrı başına DefaultMetadata aracılığıyla taşınır. Çağrı başına bir zaman aşımı, standart grpc-timeout üst bilgisine çevrilir ve CancelCall, devam eden bir akışı durdurur. Kanalın kendisi ChannelOptions aracılığıyla ayarlanır.

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

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

Interceptor'lar, yeniden deneme ve gözlemlenebilirlik

Bir Interceptors zinciri her çağrıyı sarar, böylece günlük tutma, kimlik doğrulama yenileme veya izlemeyi tek bir yerde ekleyebilirsiniz. RetryPolicy seçtiğiniz durum kodlarında yeniden dener, ServiceConfig metot başına ilke uygular ve MetricsCollector çağrı sayaçlarını ve gecikmeleri kaydeder.

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

Kendi Protocol Buffers'ınızı getirin

İstemci ham mesaj baytlarını (TBytes) alır ve döndürür, bu nedenle sizi tek bir Protocol Buffers kütüphanesine kilitlemez. İsteğinizi halihazırda kullandığınız herhangi bir protobuf aracıyla kodlayın, baytları Call metoduna iletin ve yanıt baytlarını aynı şekilde çözün. Bileşen, gRPC uzunluk öneki çerçevelemesini, sıkıştırma bayrağını, durum kodlarını ve trailer'ları sizin için işler.

Google Cloud gRPC API'leri dahildir

Genel istemcinin üzerine, sgcWebSockets, Google Cloud gRPC hizmetleri için türlü istemciler içerir: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery ve Vertex AI. Bunlar, hizmet hesabı (service-account) kimlik doğrulamasını ve istek ile yanıt mesajlarını işler, böylece protobuf'ları elle oluşturmak yerine üst düzey metotları çağırırsınız.

Kullanılabilirlik

gRPC istemcisi şimdi Delphi ve C++Builder için sgcWebSockets Enterprise sürümünde mevcuttur. Çalıştırılmaya hazır bir örnek Demos\21.GRPC\01.GRPC_Client içinde yer alır ve tam özellik, metot ve olay referansı gRPC Client ürün sayfasında bulunur.

Sorularınız, geri bildirimleriniz veya başlarken yardıma mı ihtiyacınız var? Bize ulaşın. Kodu yazan kişilerden bir yanıt alacaksınız.