【问题标题】:Should a server application detect stale/disconnected sockets?服务器应用程序是否应该检测陈旧/断开连接的套接字?
【发布时间】:2020-02-24 17:30:58
【问题描述】:

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

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

我不确定这是 .NET 特定的,还是只是通用的 TCP/IP。

【问题讨论】:

    标签: .net tcp tcplistener


    【解决方案1】:

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

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

    【讨论】:

    • 你现在正在测试我的 TCP 知识!我不知道那个标志,但在我的特殊情况下,连接用于双向通信,我相信对于客户端和服务器之间的会话来说应该是永久性的
    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多