gpt4 book ai didi

delphi - 如何关闭 idHTTPServer 上的所有连接?

转载 作者:行者123 更新时间:2023-12-01 21:35:15 25 4
gpt4 key购买 nike

拥有 idHTTPServer 并希望它停止接收请求。这样做的正确方法是什么?

我不确定下面的代码

function TRPSystem.CloseAllConnections: boolean;
var
i: Integer;
l: TList;
c: TIdThreadSafeObjectList;

begin
Result := false;
c := Main.Server.Contexts;
if c = nil then
Exit();

l := c.LockList();

try
for i := 0 to l.Count - 1 do
TIdContext(l.Items[i]).Connection.Disconnect(False);
Result := true;
finally
c.UnlockList;
end;
end;

procedure TRPSystem.ServerStop;
begin
CloseAllConnections();
Main.Server.Scheduler.ActiveYarns.Clear;
Main.Server.IsActive := false;
end;

最佳答案

要完全停用服务器,您只需将服务器的 Active 属性设置为 False。这会阻止服务器监听新连接并关闭任何当前事件的连接。无需手动关闭客户端连接,或清除事件 yarn 列表。 Active setter 会为您处理一切:

procedure TRPSystem.ServerStop;
begin
Main.Server.Active := false;
end;

否则,如果您不想完全停用服务器,只需暂时使其脱机,您可以使用 OnHeadersAvailableOnHeadersBlocked 在新的 HTTP 请求到达时拒绝它们> 事件。从OnHeadersAvailable返回False,然后从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;

关于delphi - 如何关闭 idHTTPServer 上的所有连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com