gRPC Client

Delphi/C++Builder 向けのネイティブ gRPC クライアントコンポーネントです。HTTP/2 上でのユナリおよびストリーミング呼び出し、カスタムメタデータ、デッドライン、gzip 圧縮、インターセプター、自動リトライ、OpenSSL または Windows SChannel による TLS に対応しています。任意の Protocol Buffers エンコーダーを利用でき、コンポーネントがメッセージのバイト列をフレーミングして送信します。

TsgcGRPCClient

ネイティブの TsgcHTTP2Client トランスポート上で動作する型付き gRPC クライアントです。ユナリと 3 種類のストリーミングモードすべて、ステータスおよびトレーラーの解析に対応しており、外部の gRPC ランタイムや C ライブラリは不要です。

コンポーネントクラス

TsgcGRPCClient

プロトコル

gRPC over HTTP/2 (RFC 9113)

対応プラットフォーム

Windows, macOS, Linux, iOS, Android

エディション

Enterprise

トランスポートを接続して呼び出す

フォームに TsgcHTTP2Client と TsgcGRPCClient を配置し、トランスポートを割り当ててから、リクエストのバイト列を指定してサービスメソッドを呼び出してください。

uses
  sgcHTTP2, sgcGRPC_Client, sgcGRPC_Classes, sgcGRPC_Types;

var
  HTTP2: TsgcHTTP2Client;
  GRPC: TsgcGRPCClient;
  oResponse: TsgcGRPCResponse;
begin
  // gRPC runs over an HTTP/2 transport
  HTTP2 := TsgcHTTP2Client.Create(nil);
  HTTP2.Host := 'grpc.example.com';
  HTTP2.Port := 443;
  HTTP2.TLS  := True;

  GRPC := TsgcGRPCClient.Create(nil);
  GRPC.Client := HTTP2;

  // default metadata sent on every call (auth, tracing...)
  GRPC.DefaultMetadata.Add('authorization', 'Bearer eyJ...');

  // unary call: pass 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;
// uses: sgcHTTP2, sgcGRPC_Client, sgcGRPC_Classes, sgcGRPC_Types
TsgcHTTP2Client *HTTP2 = new TsgcHTTP2Client(NULL);
HTTP2->Host = "grpc.example.com";
HTTP2->Port = 443;
HTTP2->TLS  = true;

TsgcGRPCClient *GRPC = new TsgcGRPCClient(NULL);
GRPC->Client = HTTP2;

GRPC->DefaultMetadata->Add("authorization", "Bearer eyJ...");

TsgcGRPCResponse *oResponse = GRPC->Call("helloworld.Greeter", "SayHello", RequestBytes);
if (oResponse->StatusCode == grpcOK)
  Memo1->Text = oResponse->DataString;

主な機能

sgcHTTP2 フレーミングエンジン上に構築された完全な gRPC クライアントです。4 種類の呼び出しタイプ、チャネルの調整、メタデータ、デッドライン、インターセプター、リトライに対応しています。

ユナリ呼び出し

Call はブロックして、StatusCodeStatusMessageDataTrailers を含む TsgcGRPCResponse を返します。CallAsync はすぐに戻り、OnGRPCResponse を発火します。

サーバーストリーミング

ServerStreamingCall は 1 つのリクエストを送信し、メッセージのストリームを受信します。各メッセージは OnGRPCStreamMessage を発生させ、最終ステータスとともに OnGRPCStreamEnd が発火します。

クライアントストリーミング

OpenClientStream がストリームを開き、SendStreamMessage が各メッセージを送出し、CloseClientStream がハーフクローズしてサーバーからの単一の応答を読み取ります。

双方向ストリーミング

OpenBidiStreamSendBidiMessageCloseBidiStream により、単一の HTTP/2 ストリーム上で両側が同時に送信する全二重のやり取りを実行します。

メタデータ、デッドライン、キャンセル

DefaultMetadata と呼び出しごとのメタデータが認証やトレーシングのヘッダーを伝えます。呼び出しごとのタイムアウトは grpc-timeout ヘッダーにマッピングされ、CancelCall は処理中のストリームを中断します。

チャネルオプション

ChannelOptions は、チャネル全体に対して gzip の CompressionContentTypeMaxMessageSizeMaxMetadataSize を調整します。

インターセプター、リトライ、サービス設定

Interceptors チェーンがすべての呼び出しをラップし、RetryPolicy が設定可能なステータスコードでリトライを行い、ServiceConfigMetricsCollector がメソッドごとのポリシーとカウンターを追加します。

HTTP/2 と TLS 上に構築

トランスポートは TsgcHTTP2Client です。ALPN h2、OpenSSL または SChannel による TLS、そして grpc-status / grpc-message トレーラーの型付きステータスコードへの解析を提供します。

Protobuf 非依存、Google クライアント付属

呼び出しは生のメッセージバイト列を受け渡しするため、任意の Protocol Buffers ライブラリが利用できます。型付きの Google Cloud クライアント(Pub/Sub、Speech、Translation、Vision、BigQuery、Vertex AI)がその上に同梱されています。

仕様・参考資料

このコンポーネントが実装するプロトコルの公式ソースです。

ドキュメント・デモ

コンポーネントリファレンスへの直接リンク、すぐに実行できるデモプロジェクトの入手、体験版のダウンロードができます。

オンラインヘルプ — TsgcGRPCClient このコンポーネントのプロパティ、メソッド、イベントの完全なリファレンスです。
デモプロジェクト — Demos\21.GRPC\01.GRPC_Client すぐに実行できるサンプルプロジェクトです。sgcWebSockets パッケージに同梱されています。以下から体験版をダウンロードできます。
技術ドキュメント (PDF) このコンポーネントの機能、クイックスタート、Delphi および C++ Builder 向けのコードサンプル、一次資料のリファレンスを掲載しています。
ユーザーマニュアル (PDF) ライブラリのすべてのコンポーネントを網羅した総合マニュアルです。

Delphi から gRPC サービスを呼び出してみませんか?

体験版をダウンロードして、Delphi アプリケーションにユナリおよびストリーミングの gRPC を追加してください。