sgcHTTP: matriz de características

Todo lo que hace sgcHTTP, repartido entre el servidor HTTP, el gateway FastCGI / SCGI, el cliente HTTP/2, el cliente gRPC y los tres clientes de Google Cloud. Cada capacidad funciona igual en Delphi y en C++ Builder, y todas las licencias incluyen el código fuente completo. Las subpáginas de componentes aún no están publicadas para este lanzamiento, cada entrada de abajo es autocontenida en esta página.

Servidor HTTP

Endpoints, archivos estáticos, sesiones, TLS

FastCGI / SCGI Gateway

PHP y Python detrás de tu servidor

Cliente HTTP/2

Streams multiplexados, HPACK, ALPN

Cliente gRPC

RPC unario y en streaming

Google Cloud

Pub/Sub, Calendar y FCM

Estándares y plataformas

Delphi 7 a 13, C++ Builder

sgcHTTP es autocontenido. Se entrega con el runtime sgcWebSockets Core incluido, así que no es un complemento. El servidor HTTP, TsgcHTTPServer, forma parte de ese runtime.

HTTP/2 y gRPC necesitan sgcCustomIndy. Ambas clases requieren ALPN para la negociación del protocolo TLS, algo que la librería Indy estándar no admite, así que están construidas en su lugar sobre sgcCustomIndy. Siempre se incluye en tu pedido, y el precio de sgcHTTP que se muestra ya lo cubre. Los tres clientes de Google Cloud son HTTPS puro y no lo necesitan. Tampoco lo necesita el gateway FastCGI / SCGI, que funciona con el Indy estándar que se incluye con RAD Studio.

Siete clases, tres unidades

Cuatro componentes en la página de paleta SGC HTTP y tres clases de Google Cloud solo de código. El servidor HTTP está declarado en la unidad sgcHTTP_Server del runtime Core incluido, el gateway FastCGI / SCGI en la unidad sgcHTTP_Gateway, todo lo demás en la unidad sgcHTTP.

ComponenteClase¿Paleta?Descripción
Servidor HTTPTsgcHTTPServerSíServidor HTTP: eventos de petición, archivos estáticos desde una raíz de documentos, compresión, keep-alive, sesiones, subidas de archivos, TLS y autenticación. Se incluye con el runtime Core.
FastCGI / SCGI GatewayTsgcHTTPGatewaySíReenvía las peticiones que recibe el servidor HTTP a servidores de aplicaciones FastCGI y SCGI por TCP, como PHP-FPM o un servidor SCGI de Python. Unidad sgcHTTP_Gateway. Indy estándar, no necesita sgcCustomIndy.
Cliente HTTP/2TsgcHTTP2ClientSíCliente HTTP/2 nativo: streams multiplexados, compresión de cabeceras HPACK, negociación ALPN. Necesita sgcCustomIndy.
Cliente gRPCTsgcGRPCClientSíCliente gRPC construido sobre el cliente HTTP/2: RPC unario, de streaming de servidor, de streaming de cliente y bidireccional. Necesita sgcCustomIndy.
Google Cloud Pub/SubTsgcHTTPGoogleCloud_PubSub_ClientNo, solo códigoAPI REST de Google Cloud Pub/Sub: topics, suscripciones, snapshots, publicación y extracción. HTTPS puro sobre Core.
Google Cloud CalendarTsgcHTTPGoogleCloud_Calendar_ClientNo, solo códigoGoogle Calendar API v3: calendarios y eventos, crear, actualizar, listar, eliminar. HTTPS puro sobre Core.
Google Cloud FCMTsgcHTTPGoogleCloud_FCM_ClientNo, solo códigoAPI HTTP v1 de Firebase Cloud Messaging: envía un payload de notificación push con una sola llamada. HTTPS puro sobre Core.

Endpoints, archivos estáticos, sesiones

TsgcHTTPServer publica endpoints HTTP y archivos estáticos desde tu propia aplicación. Es el mismo motor que el servidor WebSocket de sgcWebSockets sin la parte WebSocket, y se incluye con el runtime Core.

CapacidadAPINotas
EscuchaPort, Bindings, ActiveDefine el puerto, o enlaza a direcciones concretas, y luego activa el servidor.
PeticionesOnCommandGet, OnCommandOtherCada petición llega a tu código con sus objetos de petición y respuesta. OnCommandOther cubre verbos como PUT y DELETE.
Archivos estáticosDocumentRootDevuelve archivos estáticos desde la carpeta a la que lo apuntes.
CompresiónHTTPCompressionOpciones de compresión de las respuestas.
ConexionesKeepAlive, MaxConnectionsMantiene las conexiones abiertas entre peticiones y limita cuántas hay abiertas a la vez.
SesionesSessionState, AutoStartSession, SessionTimeOut, OnSessionStart, OnSessionEndSesiones en el servidor con tiempo de espera, más eventos de inicio y fin.
Límites de peticiónMaxRequestBodySizeLimita el tamaño del cuerpo de una petición.
SubidasHTTPUploadFilesGuarda los archivos subidos en un directorio que tú eliges.
TLSSSL, SSLOptionsSirve HTTPS con tu propio certificado.
AutenticaciónAuthentication, OnAuthenticationValida las credenciales en tu propio código antes de atender una petición.
HilosThreadPool, ThreadPoolOptionsReutiliza hilos de trabajo de un pool en lugar de crear uno por conexión.
RuntimesgcWebSockets CoreDeclarado en la unidad sgcHTTP_Server del runtime Core incluido, en la página de paleta SGC HTTP.

Aplicaciones PHP y Python detrás de tu servidor

TsgcHTTPGateway reenvía las peticiones que reciben TsgcHTTPServer o TsgcWebSocketHTTPServer a servidores de aplicaciones FastCGI y SCGI por TCP. Hace el trabajo de mod_proxy_fcgi y mod_proxy_scgi de Apache o de fastcgi_pass y scgi_pass de nginx, así que las aplicaciones PHP y Python se sirven desde tu servidor Delphi, sin Apache ni nginx por delante.

CapacidadAPINotas
BackendsFastCGI, SCGIPHP mediante PHP-FPM o php-cgi -b, y aplicaciones Python servidas por un servidor SCGI o FastCGI, por ejemplo flup.
PeticionesProcessLlámalo desde los eventos OnCommandGet y OnCommandOther del servidor. Devuelve true cuando un handler ha coincidido y la respuesta está rellena, y false cuando tu propio código responde a la petición.
HandlersHandlers.AddHandlers.Add('*.php', 'fcgi://127.0.0.1:9000') o Handlers.Add('/app/', 'scgi://127.0.0.1:4000'). Un handler coincide por extensión (*.php), por prefijo (/app/) o por ruta exacta.
Ajustes del handlerPath, URL, Protocol, Host, Port, DocumentRoot, EnabledApunta cada handler a su backend con una sola URL, o con protocolo, host y puerto, y define la raíz de documentos del backend.
Entorno CGISCRIPT_NAME, PATH_INFO, SCRIPT_FILENAME, QUERY_STRING, REMOTE_ADDR, HTTPSConstruido según la RFC 3875, con cada cabecera de la petición pasada como una variable HTTP_*.
Variables adicionalesEnvironment, OnBeforeRequestAñade variables por handler mediante Environment, o por petición en OnBeforeRequest.
RespuestasRespuesta CGIInterpreta la cabecera Status, las redirecciones Location, las cabeceras de la respuesta y el cuerpo. Se conservan todas las cabeceras Set-Cookie que haya.
Errores del gatewayOnError502 Bad Gateway, 503 Service Unavailable cuando el backend FastCGI está sobrecargado, y 504 Gateway Timeout, cada uno notificado en OnError.
Errores del backendOnStdErrEntrega la salida stderr que envía el backend FastCGI.
ConexionesConnectTimeout, ReadTimeout, KeepAlive, MaxIdleConnectionsTiempos de espera por handler, más un pool opcional de conexiones keep-alive para FastCGI (FCGI_KEEP_CONN), desactivado por defecto. SCGI abre una conexión por petición.
Rol de FastCGIResponderEl rol Responder de FastCGI. Las peticiones no se multiplexan en una conexión.
SeguridadIntegradaUna cabecera de petición Proxy nunca se pasa como HTTP_PROXY (httpoxy), las rutas que contienen .. se rechazan con 403, y se ignoran los nombres de cabecera con guiones bajos.
LimitacionesTCP, con búferSolo backends TCP, los sockets de dominio Unix aún no están soportados. El proceso del backend ya debe estar en marcha, el gateway no lo inicia. Las respuestas se almacenan en búfer, así que no se admite el streaming como los server-sent events.
DependenciaIndy estándarFunciona con la librería Indy que se incluye con RAD Studio, sin necesidad de sgcCustomIndy. Windows y Linux.
Unidad y demosgcHTTP_GatewayEn la página de paleta SGC HTTP. La demo está en Demos\20.HTTP_Protocol\18.FastCGI_SCGI_Gateway.

Peticiones multiplexadas, HPACK, ALPN

TsgcHTTP2Client habla HTTP/2 (RFC 9113) sobre una sola conexión TLS, negociada con ALPN, la razón por la que está construido sobre sgcCustomIndy.

CapacidadAPINotas
ConexiónHost, Port, ActiveUna sola conexión TLS transporta todos los streams de petición multiplexados.
ConectarConnect, ConnectAsyncAbre la conexión y emite una petición opcional en la misma llamada.
LecturaGet, GetAsyncLlamada síncrona o disparar y olvidar, con la respuesta entregada por evento.
EscrituraPost, PostAsync, Put, PutAsync, Patch, PatchAsyncLos cuerpos de petición son streams, así que las subidas no tienen que caber en memoria.
Delete y OptionsDelete, DeleteAsync, Options, OptionsAsyncEl resto del conjunto de verbos HTTP, con el mismo emparejamiento síncrono/asíncrono.
RespuestasOnHTTP2ResponseEntrega juntos los objetos de petición y respuesta, incluidos Response.DataString y el estado.
Cuerpos fragmentadosOnHTTP2ResponseFragmentSe dispara según llega cada fragmento de una respuesta fragmentada, antes del OnHTTP2Response final.
Server pushOnHTTP2PushPromiseExpone los recursos enviados por server push de HTTP/2 según llegan.
Ciclo de vida de la conexiónOnHTTP2Connect, OnHTTP2Disconnect, OnHTTP2GoAway, OnHTTP2RSTStreamLas señales de conexión, desconexión y reinicio de stream que define HTTP/2.
SettingsHTTP2Options, SettingsLos valores del frame SETTINGS local de HTTP/2 enviados al peer.
FiabilidadWatchDog, HeartBeat, ThrottleReconexión automática, keep-alive y limitación de peticiones, compartidos con el resto de la pila HTTP de sgc.
Autenticación y TLSAuthentication, TLSOptions, OnHTTP2AuthorizationEsquemas de autenticación estándar y configuración TLS, además de un gancho para cabeceras de autorización personalizadas.
DependenciasgcCustomIndyALPN negocia el protocolo h2 durante el handshake TLS; la librería Indy estándar no puede hacerlo.

Streaming unario, de servidor, de cliente y bidireccional

TsgcGRPCClient transporta payloads de Protocol Buffers sobre los streams multiplexados del cliente HTTP/2, así que cubre las cuatro formas de llamada de gRPC.

CapacidadAPINotas
TransporteClientUna instancia de TsgcHTTP2Client; el cliente gRPC viaja sobre ella en lugar de abrir su propia conexión.
RPC unarioCall, CallAsync, CallStringUna petición, una respuesta. Call bloquea y devuelve un TsgcGRPCResponse; CallAsync la entrega a través de OnGRPCResponse.
Streaming de servidorServerStreamingCallUna petición, un stream de respuestas entregadas a través de OnGRPCStreamMessage hasta OnGRPCStreamEnd.
Streaming de clienteOpenClientStream, SendStreamMessage, CloseClientStream, CloseClientStreamAsyncUn stream de peticiones, una respuesta final cuando el stream se cierra.
Streaming bidireccionalOpenBidiStream, SendBidiMessage, CloseBidiStreamAmbos lados hacen streaming de forma independiente sobre la misma llamada.
CancelaciónCancelCallCancela una llamada en curso mediante su id de stream.
RespuestasOnGRPCResponse, OnGRPCStreamMessage, OnGRPCStreamEndTsgcGRPCResponse transporta StatusCode, Data/DataString, Headers y Trailers.
ErroresOnGRPCError, OnGRPCExceptionErrores de código de estado de gRPC y excepciones a nivel de transporte, entregados por separado.
MetadatosDefaultMetadata, OnGRPCBeforeRequestCabeceras de metadatos de gRPC por llamada y por defecto.
ResilienciaRetryPolicy, Interceptors, ServiceConfigComportamiento de reintento, una cadena de interceptores transversal y configuración del servicio, sin tocar los puntos de llamada individuales.
ObservabilidadMetricsCollectorRecopila métricas de llamadas del cliente.
DependenciasgcCustomIndyHeredada del cliente HTTP/2 sobre el que está construido; ALPN se requiere de la misma forma.

Pub/Sub, Calendar y notificaciones push

Tres clases solo de código, autenticadas con una cuenta de servicio de Google y accedidas sobre HTTPS puro. Ninguna necesita sgcCustomIndy.

CapacidadAPINotas
AutenticaciónGoogleCloudOptions.JWT, OnAuthToken, OnAuthTokenErrorJWT de cuenta de servicio: project id, client email y private key. La misma forma en los tres clientes.
Pub/Sub: publicación y extracciónPublish, Pull, Acknowledge, SeekTsgcHTTPGoogleCloud_PubSub_Client. Envía mensajes a un topic, extrae y confirma desde una suscripción.
Pub/Sub: topicsCreateTopic, DeleteTopic, GetTopic, ListTopicsGestiona topics directamente desde código.
Pub/Sub: suscripcionesCreateSubscription, DeleteSubscripton, ListSubscriptions, ModifyAckDeadlineSubscriptionCiclo de vida completo de la suscripción, incluidos los cambios de ack-deadline y push-config.
Pub/Sub: snapshotsCreateSnapshot, DeleteSnapshot, ListSnapshotsToma una instantánea del estado de confirmación de una suscripción para reproducirla más tarde.
Calendar: calendariosNewCalendar, UpdateCalendar, DeleteCalendar, LoadCalendarsTsgcHTTPGoogleCloud_Calendar_Client. Envuelve la lista de calendarios de la Google Calendar API v3.
Calendar: eventosNewEvent, UpdateEvent, DeleteEvent, LoadEventsCrea, cambia y elimina eventos en un calendario dado.
Calendar: sincronizaciónLoadCalendarsChanged, LoadEventsChanged, OnGetCalendar, OnGetCalendarEventGanchos de sincronización incremental para los calendarios y eventos que cambiaron desde la última sincronización.
FCM: pushSendMessageTsgcHTTPGoogleCloud_FCM_Client. Una llamada envía un payload de Firebase Cloud Messaging v1 a un proyecto.
TLS y registroTLSOptions, LogFileCompartidos por los tres clientes de Google Cloud.

APIs, compiladores y destinos

Estándares públicos en el cable, y el mismo código fuente en todos los compiladores compatibles.

ÁreaDetalle
Servidor HTTPPeticiones y respuestas HTTP, archivos estáticos, sesiones y HTTPS mediante TsgcHTTPServer.
FastCGI / SCGIEl rol Responder de FastCGI y SCGI sobre TCP, con el entorno CGI construido según la RFC 3875, mediante TsgcHTTPGateway.
HTTP/2RFC 9113, con compresión de cabeceras HPACK y negociación de protocolo ALPN.
gRPCPayloads de Protocol Buffers sobre streams HTTP/2, siguiendo el protocolo de red de gRPC.
Google CloudLa API REST de Pub/Sub, la Google Calendar API v3 y la API HTTP v1 de Firebase Cloud Messaging, todas autenticadas con una cuenta de servicio de Google.
PlataformasWindows Win32, Windows Win64, Linux64, macOS, iOS y Android para las cinco clases cliente. El gateway FastCGI / SCGI se ejecuta en Windows y Linux.
DependenciaLos clientes HTTP/2 y gRPC necesitan sgcCustomIndy para ALPN. Los clientes de Google Cloud solo necesitan el runtime Core incluido. El gateway FastCGI / SCGI funciona con el Indy estándar que se incluye con RAD Studio y no necesita sgcCustomIndy.
CompiladoresDelphi y C++ Builder 7 a 13.
EdicionesHTTP/2, gRPC y el gateway FastCGI / SCGI también se entregan dentro de sgcWebSockets desde Enterprise en adelante, y los clientes de Google Cloud desde Standard en adelante. El servidor HTTP forma parte del runtime Core, así que todas las ediciones de sgcWebSockets lo incluyen también.
LicenciasIndependiente. El runtime sgcWebSockets Core viene incluido y se entrega el código fuente completo.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

Crea con sgcHTTP

Descarga la prueba gratuita, publica tu primer endpoint HTTP y haz tu primera llamada HTTP/2 o gRPC desde Delphi o C++ Builder.