gRPC 客户端

适用于 Delphi/C++Builder 的原生 gRPC 客户端组件。基于 HTTP/2 的一元和流式调用、自定义元数据、截止时间、gzip 压缩、拦截器、自动重试,以及通过 OpenSSL 或 Windows SChannel 的 TLS。可使用任意 Protocol Buffers 编码器;组件负责对您的消息字节进行分帧和发送。

TsgcGRPCClient

运行于原生 TsgcHTTP2Client 传输层之上的类型化 gRPC 客户端。支持一元和全部三种流式模式、状态与尾部解析,无需外部 gRPC 运行时或 C 语言库。

组件类

TsgcGRPCClient

协议

gRPC 基于 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 客户端。四种调用类型、通道调优、元数据、截止时间、拦截器和重试。

一元调用

Call 会阻塞并返回一个 TsgcGRPCResponse,其中包含 StatusCodeStatusMessageDataTrailersCallAsync 立即返回并触发 OnGRPCResponse

服务器流

ServerStreamingCall 发送一个请求并接收一个消息流。每条消息触发 OnGRPCStreamMessageOnGRPCStreamEnd 随最终状态一起触发。

客户端流

OpenClientStream 打开流,SendStreamMessage 推送每条消息,CloseClientStream 半关闭并读取服务器的单条回复。

双向流

OpenBidiStreamSendBidiMessageCloseBidiStream 在单条 HTTP/2 流上进行全双工交换,双方可同时发送。

元数据、截止时间、取消

DefaultMetadata 和每次调用的元数据携带认证和追踪标头。每次调用的超时映射到 grpc-timeout 标头,CancelCall 可中止进行中的流。

通道选项

ChannelOptions 为整个通道调优 gzip CompressionContentTypeMaxMessageSizeMaxMetadataSize

拦截器、重试、服务配置

Interceptors 链包裹每次调用,RetryPolicy 在可配置的状态码上重试,ServiceConfig 加上 MetricsCollector 则增加每方法策略和计数器。

基于 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。