如何解决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 /端口。
所以现在我们认为我们的某些联系陷入了OnConnect
和OnCommandGet
/ OnCommandOther
之间。
并非我们所有的客户都遇到此问题,但是对于某些客户来说,只需要2到10天就可以到达MaxConnections
。
服务的客户是移动设备,因此我们认为建立连接后可能与Internet连接的质量有关!!
我们可以采取一些措施来防止这种情况发生吗?
解决方法
当客户端连接时,将立即触发OnConnect
事件,但是在收到完整的HTTP请求之前不会触发OnCommand...
事件。但是,您绝对应该能够在PeerIP
事件中获得可行的PeerPort
/ OnCommand...
值。
如果您的移动设备的连接稳定性出现问题,则它们可能会异常断开连接的末端,并且服务器的OS可能无法及时对此做出反应。这肯定会导致服务器至少在一段时间内最终会出现一堆死连接。
在OnConnect
事件中,尝试为AContext.Connection.ReadTimeout
属性或AContext.Binding.SetKeepAliveValues()
方法分配一个合理的非无限超时,看看是否对您的问题有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。