我有一个 ajax 应用程序每 3 秒发出一次请求,请求的页面将标头设置为 (header("Connection: Keep-Alive, close");),然后执行数据库查询并返回最新数据。
TIME_WAIT 的值为 60 秒,因此,即使我在请求的页面中关闭连接(即“连接:保持活动,关闭”),该连接似乎在接下来的 60 秒内仍然存在(我发出的每个 Ajax 请求都会发生这种情况),因此在 1 分钟内发出了 20 个请求,该 IP 的总 TIME_WAIT 似乎约为 20
是否可以将 TIME_WAIT 减少到 15 秒,以减少总体 TIME_WAITS,或者是否可以在每次 Ajax 请求后强制关闭连接
任何帮助将不胜感激
谢谢
答案1
您可以使用 net.ipv4.tcp_fin_timeout 内核参数:
# sysctl net.ipv4.tcp_fin_timeout=15
编辑/etc/sysctl.conf,添加至末尾
net.ipv4.tcp_fin_timeout = 15
然后运行:
# sysctl -p
答案2
Connection: keep-alive, close
不是有效的 HTTP 1.1,因为只有一个连接令牌是允许的,因此我希望这个标头被忽略并且保持活动状态仍然有效;在 HTTP 1.0 中,“连接”标签意味着完全不同的东西。
无论连接是否“回收”,在技术上应该没有区别,你应该把选择权留给浏览器。玩弄 FIN 超时几乎从来都不是一个好主意。