gRPC 客户端
适用于 Delphi/C++Builder 的原生 gRPC 客户端组件。基于 HTTP/2 的一元和流式调用、自定义元数据、截止时间、gzip 压缩、拦截器、自动重试,以及通过 OpenSSL 或 Windows SChannel 的 TLS。可使用任意 Protocol Buffers 编码器;组件负责对您的消息字节进行分帧和发送。
适用于 Delphi/C++Builder 的原生 gRPC 客户端组件。基于 HTTP/2 的一元和流式调用、自定义元数据、截止时间、gzip 压缩、拦截器、自动重试,以及通过 OpenSSL 或 Windows SChannel 的 TLS。可使用任意 Protocol Buffers 编码器;组件负责对您的消息字节进行分帧和发送。
运行于原生 TsgcHTTP2Client 传输层之上的类型化 gRPC 客户端。支持一元和全部三种流式模式、状态与尾部解析,无需外部 gRPC 运行时或 C 语言库。
TsgcGRPCClient
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,其中包含 StatusCode、StatusMessage、Data 和 Trailers。CallAsync 立即返回并触发 OnGRPCResponse。
ServerStreamingCall 发送一个请求并接收一个消息流。每条消息触发 OnGRPCStreamMessage;OnGRPCStreamEnd 随最终状态一起触发。
OpenClientStream 打开流,SendStreamMessage 推送每条消息,CloseClientStream 半关闭并读取服务器的单条回复。
OpenBidiStream、SendBidiMessage 和 CloseBidiStream 在单条 HTTP/2 流上进行全双工交换,双方可同时发送。
DefaultMetadata 和每次调用的元数据携带认证和追踪标头。每次调用的超时映射到 grpc-timeout 标头,CancelCall 可中止进行中的流。
ChannelOptions 为整个通道调优 gzip Compression、ContentType、MaxMessageSize 和 MaxMetadataSize。
Interceptors 链包裹每次调用,RetryPolicy 在可配置的状态码上重试,ServiceConfig 加上 MetricsCollector 则增加每方法策略和计数器。
传输层为 TsgcHTTP2Client:ALPN h2、通过 OpenSSL 或 SChannel 的 TLS,以及将 grpc-status / grpc-message 尾部解析为类型化状态码。
调用接收和返回原始消息字节,因此任何 Protocol Buffers 库都可使用。其上还附带类型化的 Google Cloud 客户端(Pub/Sub、Speech、Translation、Vision、BigQuery、Vertex AI)。
本组件所实现协议的权威来源。