Чтобы полностью деактивировать сервер, вам нужно только установить для свойства сервера Active
значение False.Это останавливает сервер от прослушивания новых соединений и закрывает все активные в данный момент соединения.Нет необходимости закрывать клиентские подключения вручную или очищать список активных нитей.Сеттер Active
обрабатывает все за вас:
procedure TRPSystem.ServerStop;
begin
Main.Server.Active := false;
end;
В противном случае, если вы не хотите полностью деактивировать сервер, просто временно отключите его, вы можете отклонить новые HTTP-запросы по мере их поступления, используяOnHeadersAvailable
и OnHeadersBlocked
события.Верните False из OnHeadersAvailable
, а затем верните подходящий код состояния из OnHeadersBlocked
, например 503 Service Unavailable
(по умолчанию 403 Forbidden
), например:
procedure TMain.ServerHeadersAvailable(AContext: TIdContext; const AUri: string; AHeaders: TIdHeaderList; var VContinueProcessing: Boolean);
begin
if Offline then
VContinueProcessing := False;
end;
procedure TMain.ServerHeadersBlocked(AContext: TIdContext; AHeaders: TIdHeaderList; var VResponseNo: Integer; var VResponseText, VContentText: String);
begin
VResponseNo := 503;
end;