我想在TIdHttpServer上进行近距离空闲连接。
这里https://stackoverflow.com/a/35107685/2936170我找到了
[...] ReadTimeout属性可用于断开>的慢/死客户端。不及时发送请求。
在TIdHttpServer服务器上,我已在OnConnect事件上将ReadTimeout设置为1秒
begin
IdHTTPServer.KeepAlive := False;
IdHTTPServer.OnConnect := OnConnect;
IdHTTPServer.DefaultPort := 80;
IdHTTPServer.AutoStartSession := False;
IdHTTPServer.SessionState := False;
IdHTTPServer.Active := True;
end;
procedure OnConnect(AContext: TIdContext);
begin
AContext.Connection.Socket.ReadTimeout := 1000; // 1 second
end;
为测试服务器超时,我创建了一个简单的客户端,并与TIdTCPClient建立TCP连接
begin
IdTCPClient.Port := 80;
IdTCPClient.Host := '127.0.01';
IdTCPClient.Connect;
end;
在Windows网络活动部分,从资源监视器,我在tpc连接列表中看到客户端和服务器连接。 每个连接(服务器和客户端)都会持续超过服务器超时...
为什么IdHttpServer不会通过readtimeout关闭连接?
更新1
tcp连接在2分钟后消失(但我的超时是1秒)。
更新2
如果我注释掉readtimeout行,连接永远不会消失。 IdHTTPServer似乎有一个defaut无限超时。我认为readtimeout工作,但Windows网络活动不是实时状态信息。