我使用 Delphi2007 和 Indy10 创建了一个网络服务器。
服务器最初运行良好,但一段时间后(通常在 8 到 48 小时之间)DoMaxConnectionsExceeded方法开始触发;我的网络服务器不再正常工作。目前我将MaxConnections设置为 500。我过去曾尝试更改此设置。而且似乎值越大,Web 服务器的寿命就越长。所以这让我觉得连接没有被释放。
- 我在实例化中做错了吗?为什么连接不被释放?
- 有没有办法获取所有连接的列表(通过这样做我可以检查 IP 地址,看看它是否可能是 DOS 攻击)。还有一种方法来获取他们试图点击的网址?
- 我还试验了没有变化的KeepAlive属性。
- 我应该将MaxConnections设置为 0 吗?
实例化 TIdHTTPServer 的源代码:
IdHTTPServer1 := TIdHTTPServer.Create;
IdHTTPServer1.MaxConnections := 500;
IdHTTPServer1.AutoStartSession := True;
IdHTTPServer1.KeepAlive := FGlobalKeepAlive;
IdHTTPServer1.SessionState := True;
IdHTTPServer1.OnCommandGet := IdHTTPServer1CommandGet;
IdHTTPServer1.onexception := IdHttpServerexception;
IdHTTPServer1.onlistenexception := IdHttpServerlistenexception;
idHttpServer1.ParseParams := True;
idHttpServer1.OnQuerySSLPort := QuerySSLPort;
idHttpServer1.IOHandler := ServerIOHandler;
idHttpServer1.Bindings.Add.Port := 80;
idHttpServer1.Bindings.Add.Port := 443;
IdHTTPServer1.Active := True;
更新- 想添加我怀疑它可能与 SSL 有关。我有类似的不需要 SSL 的基于 Indy 的 Web 服务器。虽然它们确实会定期失败,但它们几乎不会经常失败。但是有了这些,我没有记录DoMaxConnectionsExceeded。我将添加对此事件的跟踪,以查看它们是否以及何时失败,这是因为超出了 maxconnections。