You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测Indy TCP Client在服务端达最大连接数时的连接失败问题

Indy服务端MaxConnections超限后客户端未提示连接失败问题解答

根因说明

  • Indy 的 TIdTCPServer 对 MaxConnections 参数的校验时机晚于TCP三次握手完成阶段:内核先完成TCP握手、将连接移交到服务端进程后,Indy才会校验当前连接数是否超过阈值。
  • 当连接数超限后,服务端会直接静默关闭该超额连接,不会在握手阶段返回拒绝标识,因此客户端TCP栈会先收到握手成功的响应,触发 TIdTCPClient 的 OnStatus 事件返回Connected状态。
  • 该底层断开状态不会主动通知到客户端应用层,只有当客户端第一次尝试收发数据时才会捕获到连接已关闭的异常,因此会出现客户端显示连接成功但无法传输数据的现象,这个是Indy组件的默认设计,不是操作错误。

优化方案

你可以通过两种方案避免客户端误判连接状态:

  • 服务端自定义超限处理逻辑:重写服务端 OnConnect 事件,开头先统计当前活跃连接数,超过阈值时立刻向客户端发送约定好的连接拒绝报文,再主动关闭连接,客户端收到报文即可直接判定连接失败。
  • 客户端增加连接有效性校验:客户端执行Connect方法后不直接判定连接可用,先向服务端发送握手校验包,等待服务端返回合法响应后再标记连接可用,超时未收到响应则判定为连接失败。

内容的提问来源于stack exchange,提问作者steve.b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:45:09