O sgcWebSockets agora traz um cliente gRPC nativo para Delphi e C++Builder. O novo componente TsgcGRPCClient fala gRPC sobre o próprio transporte HTTP/2 da biblioteca, então não há nenhum runtime gRPC externo, nenhuma biblioteca C e nenhuma DLL extra para implantar. Ele faz parte da edição Enterprise e roda no Windows, macOS, Linux, iOS e Android.
gRPC é apenas mensagens de Protocol Buffers enquadradas sobre HTTP/2. O sgcWebSockets já possui uma pilha HTTP/2 completa, então o cliente gRPC é construído diretamente sobre ela: ele enquadra os bytes da sua requisição, aplica os cabeçalhos e timeouts do gRPC e analisa o status e os trailers de volta em resultados tipados.
Construído sobre o transporte HTTP/2 nativo
Um canal gRPC é uma conexão HTTP/2. Você cria um TsgcHTTP2Client, aponta-o para o host e a porta, e então o atribui à propriedade Client do componente gRPC. O TLS é tratado pelo cliente HTTP/2 através do OpenSSL ou do 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;
Todos os quatro tipos de chamada
O componente suporta todos os padrões de interação do gRPC, síncronos ou assíncronos:
- Unária.
Callbloqueia e retorna umTsgcGRPCResponse;CallAsyncretorna imediatamente e disparaOnGRPCResponse. - Server streaming.
ServerStreamingCallenvia uma requisição e recebe um fluxo de mensagens, cada uma disparandoOnGRPCStreamMessage, comOnGRPCStreamEndao final. - Client streaming.
OpenClientStream, depoisSendStreamMessagepara cada mensagem, depoisCloseClientStreampara ler a resposta única. - Streaming bidirecional.
OpenBidiStream,SendBidiMessageeCloseBidiStreamexecutam uma troca full-duplex sobre um único fluxo HTTP/2.
Uma resposta carrega tudo o que a chamada retornou: StatusCode, StatusMessage, os bytes brutos de Data (ou DataString) e os Trailers.
Metadados, deadlines e opções de canal
Cabeçalhos personalizados trafegam através de DefaultMetadata para todo o canal, ou por chamada. Um timeout por chamada é traduzido para o cabeçalho padrão grpc-timeout, e CancelCall aborta um fluxo em andamento. O próprio canal é ajustado através de ChannelOptions.
// gzip compression and channel limits
GRPC.ChannelOptions.Compression := grpcGzip;
GRPC.ChannelOptions.MaxMessageSize := 16 * 1024 * 1024;
// abort a long-running stream
GRPC.CancelCall(StreamId);
Interceptadores, nova tentativa e observabilidade
Uma cadeia de Interceptors envolve cada chamada, então você pode adicionar logging, atualização de autenticação ou tracing em um só lugar. RetryPolicy faz nova tentativa nos códigos de status que você escolher, ServiceConfig aplica política por método, e MetricsCollector registra contadores de chamadas e latências.
GRPC.RetryPolicy.MaxAttempts := 4;
GRPC.RetryPolicy.RetryableStatusCodes :=
GRPC.RetryPolicy.RetryableStatusCodes + [grpcUNAVAILABLE];
Use seu próprio Protocol Buffers
O cliente recebe e retorna bytes brutos de mensagem (TBytes), então ele não prende você a nenhuma biblioteca específica de Protocol Buffers. Codifique sua requisição com qualquer ferramenta protobuf que você já usa, passe os bytes para Call e decodifique os bytes da resposta da mesma forma. O componente trata o enquadramento de prefixo de comprimento do gRPC, a flag de compressão, os códigos de status e os trailers para você.
APIs gRPC do Google Cloud incluídas
Além do cliente genérico, o sgcWebSockets traz clientes tipados para os serviços gRPC do Google Cloud: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery e Vertex AI. Eles tratam a autenticação por conta de serviço e as mensagens de requisição e resposta, então você chama métodos de alto nível em vez de construir protobufs manualmente.
Disponibilidade
O cliente gRPC está disponível agora na edição sgcWebSockets Enterprise para Delphi e C++Builder. Um exemplo pronto para executar está incluído em Demos\21.GRPC\01.GRPC_Client, e a referência completa de propriedades, métodos e eventos está na página do produto Cliente gRPC.
Dúvidas, comentários ou ajuda para começar? Entre em contato. Você receberá uma resposta das pessoas que escreveram o código.
