TIdHTTPServer缓慢使用所有连接

问题描述

Delphi 10.3.1,Indy 10.6.2.5366

我们在REST服务中使用TIdHTTPServer,而TIdHttpServer在缓慢使用所有连接时遇到问题。 MaxConnections是100。 当我们达到100个连接时,没有人可以从该服务获得任何响应。

使用netstat可以看到IP和对等端口,在OnCommandGet / OnCommandOther中,我们正在记录IP和对等端口,但是没有IP /端口与netstat中的IP /端口匹配状态为ESTABLISHED。

但是当我们也开始在OnConnect中记录IP和对等端口时,我们可以从netstat中看到IP /端口。

所以现在我们认为我们的某些联系陷入了OnConnectOnCommandGet / OnCommandOther之间。

并非我们所有的客户都遇到此问题,但是对于某些客户来说,只需要2到10天就可以到达MaxConnections

服务的客户是移动设备,因此我们认为建立连接后可能与Internet连接的质量有关!!

我们可以采取一些措施来防止这种情况发生吗?

解决方法

当客户端连接时,将立即触发OnConnect事件,但是在收到完整的HTTP请求之前不会触发OnCommand...事件。但是,您绝对应该能够在PeerIP事件中获得可行的PeerPort / OnCommand...值。

如果您的移动设备的连接稳定性出现问题,则它们可能会异常断开连接的末端,并且服务器的OS可能无法及时对此做出反应。这肯定会导致服务器至少在一段时间内最终会出现一堆死连接。

OnConnect事件中,尝试为AContext.Connection.ReadTimeout属性或AContext.Binding.SetKeepAliveValues()方法分配一个合理的非无限超时,看看是否对您的问题有所帮助。