首页 > 解决方案 > 服务器应用程序是否应该检测陈旧/断开连接的套接字?

问题描述

这个问题讨论了如何检测 TCP 连接是否已断开是非常重要的:Detecting TCP Client Disconnect

它没有回答的是,如果我使用现代异步 .NET 网络类,是否需要检测这种情况?如果我的服务器接受来自客户端的传入连接请求,并且客户端在检测到问题时负责重新连接,这是一个问题吗?例如,如果客户端 A 定期重新连接,它以前的连接会在幕后整理吗?如果客户端行为不端并且断开不正确 - 这并不完全在我的控制之下 - 我最终会得到大量影响性能的“陈旧”连接吗?

我不确定这是否是特定于.NET 的,或者只是通用的 TCP/IP。

标签: .nettcptcplistener

解决方案


我认为,这取决于一些细节。例如,是否在启用 TCP_KEEPALIVE 标志的情况下创建了 TCP 套接字(可以strace -e network ...在 Linux 中看到)?还是你经常给他们写信?

如果两者的答案都是“否”,那么您最终可能会遇到陈旧的连接,这些不仅会导致性能问题,而且一次可以拥有的数量也有限制(Linux 中默认为 1024)。因此,如果积累了足够多的陈旧连接,您的服务可能会变得无响应。


推荐阅读