TIdHTTPServer 缓慢使用所有连接

TIdHTTPServer slowly using all connections

Delphi 10.3.1,印地 10.6.2.5366

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

使用 netstat 我们可以看到 IP 和对端端口,在 OnCommandGet/OnCommandOther 中我们记录 IP 和对端端口,但是 [=36= 的 none ] 与状态 ESTABLISHED 的 netstat 中的 IP/ports 相匹配。

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

所以现在我们认为我们的一些连接卡在 OnConnectOnCommandGet/OnCommandOther 之间。

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

该服务的客户端是移动设备,所以我们认为这可能与建立连接时的互联网连接质量有关?!

我们可以做些什么来防止这种情况发生吗?

客户端连接时会立即触发 OnConnect 事件,但直到收到完整的 HTTP 请求后才会触发 OnCommand... 事件。但是您肯定能够在 OnCommand... 事件中获得可行的 PeerIP/PeerPort 值。

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

OnConnect 事件中,尝试为 AContext.Connection.ReadTimeout 属性 或 AContext.Binding.SetKeepAliveValues() 方法分配一个合理的 non-infinite 超时,看看是否帮助解决你的问题。