【问题标题】:TIdHTTPServer slowly using all connectionsTIdHTTPServer 缓慢使用所有连接
【发布时间】:2020-10-07 19:38:12
【问题描述】:

德尔福 10.3.1,印地 10.6.2.5366

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

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

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

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

并非所有客户都遇到此问题,但有些客户只需 2-10 天即可到达MaxConnections

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

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

【问题讨论】:

    标签: delphi indy indy10 delphi-10.3-rio


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      相关资源
      最近更新 更多