sgcWebSockets ahora incluye un cliente gRPC nativo para Delphi y C++Builder. El nuevo componente TsgcGRPCClient habla gRPC sobre el propio transporte HTTP/2 de la librería, por lo que no hay ningún runtime gRPC externo, ninguna librería C ni DLLs adicionales que desplegar. Forma parte de la edición Enterprise y se ejecuta en Windows, macOS, Linux, iOS y Android.
gRPC no es más que mensajes de Protocol Buffers enmarcados sobre HTTP/2. sgcWebSockets ya cuenta con una pila HTTP/2 completa, así que el cliente gRPC se construye directamente encima de ella: enmarca los bytes de tu petición, aplica las cabeceras y los tiempos de espera de gRPC, y analiza el estado y los trailers para devolverlos como resultados tipados.
Construido sobre el transporte HTTP/2 nativo
Un canal gRPC es una conexión HTTP/2. Creas un TsgcHTTP2Client, lo apuntas al host y al puerto, y luego lo asignas a la propiedad Client del componente gRPC. El TLS lo gestiona el cliente HTTP/2 a través de OpenSSL o 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;
Los cuatro tipos de llamada
El componente admite todos los patrones de interacción de gRPC, de forma síncrona o asíncrona:
- Unaria.
Callbloquea y devuelve unTsgcGRPCResponse;CallAsyncretorna de inmediato y disparaOnGRPCResponse. - Server streaming.
ServerStreamingCallenvía una petición y recibe un flujo de mensajes, cada uno de los cuales generaOnGRPCStreamMessage, conOnGRPCStreamEndal cierre. - Client streaming.
OpenClientStream, luegoSendStreamMessagepor cada mensaje, y despuésCloseClientStreampara leer la única respuesta. - Streaming bidireccional.
OpenBidiStream,SendBidiMessageyCloseBidiStreamejecutan un intercambio full-duplex sobre un único stream HTTP/2.
Una respuesta lleva todo lo que devolvió la llamada: StatusCode, StatusMessage, los bytes en bruto de Data (o DataString) y los Trailers.
Metadatos, deadlines y opciones de canal
Las cabeceras personalizadas viajan a través de DefaultMetadata para todo el canal, o por llamada. Un timeout por llamada se traduce a la cabecera estándar grpc-timeout, y CancelCall aborta un stream en curso. El propio canal se ajusta mediante ChannelOptions.
// gzip compression and channel limits
GRPC.ChannelOptions.Compression := grpcGzip;
GRPC.ChannelOptions.MaxMessageSize := 16 * 1024 * 1024;
// abort a long-running stream
GRPC.CancelCall(StreamId);
Interceptores, reintentos y observabilidad
Una cadena de Interceptors envuelve cada llamada, de modo que puedes añadir registro, renovación de autenticación o trazado en un único lugar. RetryPolicy reintenta con los códigos de estado que elijas, ServiceConfig aplica políticas por método, y MetricsCollector registra contadores de llamadas y latencias.
GRPC.RetryPolicy.MaxAttempts := 4;
GRPC.RetryPolicy.RetryableStatusCodes :=
GRPC.RetryPolicy.RetryableStatusCodes + [grpcUNAVAILABLE];
Usa tu propia implementación de Protocol Buffers
El cliente toma y devuelve bytes de mensaje en bruto (TBytes), así que no te ata a ninguna librería de Protocol Buffers en concreto. Codifica tu petición con las herramientas protobuf que ya uses, pasa los bytes a Call, y decodifica los bytes de la respuesta de la misma manera. El componente se encarga por ti del enmarcado con prefijo de longitud de gRPC, el flag de compresión, los códigos de estado y los trailers.
APIs gRPC de Google Cloud incluidas
Además del cliente genérico, sgcWebSockets incluye clientes tipados para los servicios gRPC de Google Cloud: Pub/Sub, Speech-to-Text, Translation, Vision, Natural Language, Cloud Storage, BigQuery y Vertex AI. Estos gestionan la autenticación de la cuenta de servicio y los mensajes de petición y respuesta, de forma que llamas a métodos de alto nivel en lugar de construir protobufs a mano.
Disponibilidad
El cliente gRPC ya está disponible en la edición Enterprise de sgcWebSockets para Delphi y C++Builder. Se incluye un ejemplo listo para ejecutar en Demos\21.GRPC\01.GRPC_Client, y la referencia completa de propiedades, métodos y eventos está en la página de producto del cliente gRPC.
¿Preguntas, comentarios o ayuda para empezar? Ponte en contacto. Recibirás respuesta de las personas que escribieron el código.
