TsgcWebSocketHTTPServer › イベント › OnHTTP2BeforeAsyncRequest
HTTP/2 リクエストがキューに入れられる前に発生し、アプリケーションがスレッドプールで実行するか接続スレッドで実行するかを選択できます。
property OnHTTP2BeforeAsyncRequest: TsgcWSOnBeforeHttp2AsyncRequest;
// TsgcWSOnBeforeHttp2AsyncRequest = procedure(Sender: TObject; Connection: TsgcWSConnection; const ARequestInfo: TIdHTTPRequestInfo; var Async: Boolean) of object
—
HTTP2Options.PoolOfThreads.EnabledがTrueの場合、サーバーはHTTP/2の多重化を活用するために、受信HTTP/2リクエストをワーカープール(HTTP2Options.Threads)でディスパッチします。OnHTTP2BeforeAsyncRequestは、キューイングされる前にすべてのリクエストに対して発生します。ARequestInfo.Documentを検査して決定し、Asyncをスレッドプールで実行するにはTrue(デフォルト)に、接続スレッドで実行するにはFalseに設定します。短いリクエストを接続スレッドにルーティングすると、低速なリクエストをスレッド化したままプールのオーバーヘッドを回避できます。これが推奨される微調整戦略です。
procedure OnHTTP2BeforeAsyncRequest(Sender: TObject; Connection: TsgcWSConnection;
const ARequestInfo: TIdHTTPRequestInfo; var Async: Boolean);
begin
if ARequestInfo.Document = '/fast-request' then
Async := False;
end;