【发布时间】:2012-05-12 18:08:54
【问题描述】:
我正在编写一个玩具示例来进行 NAT 遍历。对广泛使用的桌面应用程序如何做到这一点感兴趣,我使用了wireshark 来尝试分析它的流量。在对输出进行一些研究后,我意识到服务器通知(例如,“新文件添加到您的 xxx 文件夹”)使用某种 Comet 机制工作,具有长寿命的 HTTP 连接。但最让我吃惊的是,尽管流量很低(1 个 HTTP GET 及其每分钟的响应),但 TCP 连接从未关闭。我可以保证连接在至少 20 分钟内没有关闭。
到目前为止,我的理解是同时打开大量长寿命的 TCP 连接会很快消耗服务器的资源(主要是内存方面)。所以我的问题是,这种应用程序如何能够长时间有效地保持如此大量的 TCP 和 HTTP 连接同时打开?他们是否使用某种特殊的服务器?还是只需要添加硬件以进行水平扩展?
我用谷歌搜索了很多试图找到答案,但没有运气。也许我错过了一些非常明显的东西。
【问题讨论】:
-
"同时打开大量长寿命 TCP 连接会很快消耗服务器的资源(主要是内存方面)。"到底是什么让你这么想?
-
也许我没有正确解释。打开该连接时,它使用的资源不能用于处理任何其他请求。据我了解,应该快速处理请求,以便再次释放资源来处理更多请求。我不明白这种应用程序如何有效地管理如此大量的持久连接。我的意思是,他们除了一味地增加服务器之外,还做了什么?
-
不一定会消耗很多内存,但是这样的服务器进程需要对文件描述符有相当高的限制(因为每次调用accept()都会返回一个新的文件描述符)
标签: http connection