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/端口。
所以现在我们认为我们的一些连接在OnConnect和OnCommandGet/OnCommandOther之间卡住了。
并非我们所有的客户都会遇到这个问题,但对于某些客户来说,只需要2-10天就能联系到MaxConnections。
服务的客户端是移动设备,所以我们认为这可能与建立连接时的internet连接质量有关?!
我们能做些什么来防止这种情况发生吗?
发布于 2020-10-08 07:03:11
客户端连接时会立即触发OnConnect事件,但直到收到完整的HTTP请求时才会触发OnCommand...事件。但是您应该能够在OnCommand...事件中获得可行的PeerIP/PeerPort值。
如果您的移动设备的连接稳定性有问题,它们可能会异常地断开连接,服务器的操作系统可能无法及时对此做出反应。这肯定会导致服务器端出现一堆死连接,至少在一段时间内是这样。
在OnConnect事件中,尝试为AContext.Connection.ReadTimeout属性或AContext.Binding.SetKeepAliveValues()方法分配一个合理的非无限超时,看看这是否有助于解决您的问题。
https://stackoverflow.com/questions/64251162
复制相似问题