TsgcWebSocketHTTPServer | HTTP/2 Server Threads

Consulte a continuación las diferencias entre HTTP 1.1 y HTTP 2.0:

 

HTTP 1.1

En el comportamiento HTTP tradicional, al realizar múltiples solicitudes sobre la misma conexión, el cliente debe esperar la respuesta de cada solicitud antes de enviar la siguiente. Este enfoque secuencial aumenta significativamente el tiempo de carga de los recursos de un sitio web. Para resolver este problema, HTTP/1.1 introdujo una característica denominada pipelining, que permite a un cliente enviar múltiples solicitudes sin esperar las respuestas del servidor. El servidor, a su vez, responde al cliente en el mismo orden en que recibió las solicitudes.

 

Aunque el pipelining parecía ser una solución, se enfrentó a varios desafíos:

 

 

 

En un esfuerzo por optimizar la carga de páginas desde servidores que admiten HTTP/1.1, los navegadores web implementaron una solución alternativa. Abren entre seis y ocho conexiones paralelas al servidor, lo que permite la transmisión simultánea de múltiples solicitudes. Este paralelismo tiene como objetivo mitigar los problemas asociados al pipelining y mejorar los tiempos de carga general de las páginas.

 

La elección de seis a ocho conexiones paralelas por parte de los navegadores web se basa en consideraciones de optimización. Las razones específicas que justifican este número pueden implicar un equilibrio entre el aprovechamiento de recursos, la eficiencia de la red y la prevención de posibles cuellos de botella.

 

 

HTTP 2.0

Como respuesta a las limitaciones encontradas en la canalización, HTTP/2 introdujo una característica denominada multiplexación. La multiplexación permite una comunicación más eficiente entre el cliente y el servidor al habilitar la transmisión simultánea de múltiples solicitudes y respuestas sobre una única conexión.

 

HTTP/2 utiliza un mecanismo de entramado binario, lo que significa que los mensajes HTTP se dividen en unidades más pequeñas e independientes llamadas tramas. Estas tramas pueden intercalarse y enviarse por la conexión de forma independiente entre sí. En el extremo receptor, las tramas se vuelven a ensamblar para reconstruir el mensaje HTTP original.

 

Este mecanismo de encuadre binario es fundamental para lograr la multiplexación en HTTP/2. Permite que el navegador envíe múltiples solicitudes a través de la misma conexión sin encontrar problemas de bloqueo. Como resultado, navegadores como Chrome utilizan el mismo ID de conexión para las solicitudes HTTP/2, lo que permite una comunicación eficiente e ininterrumpida entre el cliente y el servidor.

En esencia, la función de multiplexación de HTTP/2, habilitada por el mecanismo de encuadre binario, mejora la eficiencia y velocidad del intercambio de datos entre clientes y servidores al facilitar la transmisión simultánea de múltiples solicitudes y respuestas sobre una única conexión.

 

 

TsgcWebSocketHTTPServer

Para mejorar el rendimiento del protocolo HTTP/2, las solicitudes se distribuyen por defecto en un pool de hilos (32 por defecto) cada vez que el servidor recibe una nueva solicitud HTTP/2. Esto evita esperas cuando una única conexión envía muchas solicitudes concurrentes que requerirían un procesamiento secuencial (en el contexto del hilo de conexión) en ausencia de este pool de hilos.

 

El comportamiento del grupo de hilos puede configurarse con las siguientes propiedades.

 

 

Para ajustar con precisión las solicitudes, seleccionando qué solicitudes deben procesarse en el pool de hilos (porque consumen tiempo) mientras otras pueden procesarse en el hilo de conexión, puede utilizar el evento OnHttp2BeforeAsyncRequest. Este evento se activa antes de encolar la solicitud en el pool de hilos. Utilice el parámetro Async para establecer si la solicitud es asíncrona o no.

 


procedure OnHTTP2BeforeAsyncRequest(Sender: TObject; Connection: TsgcWSConnection; const ARequestInfo: TIdHTTPRequestInfo; var Async: Boolean);
begin
  if ARequestInfo.Document = '/fast-request' then
    ASync := False;
end;