.net - 服务器应用程序是否应该检测陈旧/断开连接的套接字?
问题描述
这个问题讨论了如何检测 TCP 连接是否已断开是非常重要的:Detecting TCP Client Disconnect
它没有回答的是,如果我使用现代异步 .NET 网络类,是否需要检测这种情况?如果我的服务器接受来自客户端的传入连接请求,并且客户端在检测到问题时负责重新连接,这是一个问题吗?例如,如果客户端 A 定期重新连接,它以前的连接会在幕后整理吗?如果客户端行为不端并且断开不正确 - 这并不完全在我的控制之下 - 我最终会得到大量影响性能的“陈旧”连接吗?
我不确定这是否是特定于.NET 的,或者只是通用的 TCP/IP。
解决方案
我认为,这取决于一些细节。例如,是否在启用 TCP_KEEPALIVE 标志的情况下创建了 TCP 套接字(可以strace -e network ...
在 Linux 中看到)?还是你经常给他们写信?
如果两者的答案都是“否”,那么您最终可能会遇到陈旧的连接,这些不仅会导致性能问题,而且一次可以拥有的数量也有限制(Linux 中默认为 1024)。因此,如果积累了足够多的陈旧连接,您的服务可能会变得无响应。
推荐阅读
- java - 用 mouseListener 改变 JButton 的颜色
- postgresql - 从第二个表中选择一列的多行与postgresql中的第一个表
- json - 如何制作一个结构来解码 Swift 中的 JSON 结构?
- reactjs - 动态导入不适用于 Webpack 4 + React + @loadable/component
- arrays - Pytorch U-net 分割模型的“ValueError:轴与数组错误不匹配”可能是什么原因?
- php - PHP 对于每个帮助,请
- python - Markdown Preview 增强版 VSCode 运行代码块
- python - Matplotlib 多项式回归 - 显示的线条过多
- unity3d - Unity - 防止子对象被拖到父对象之外
- javascript - Chart.js 包含变量时不显示