如何在不中断服务器资源的情况下建立持久的TCP连接?

时间:2012-05-12 18:08:55

标签: http connection

我正在编写一个玩具示例来进行NAT遍历。对广泛使用的桌面应用程序如何做到这一点感兴趣,我使用wireshark尝试分析其流量。在对输出进行一些研究之后,我意识到服务器通知(例如,“添加到xxx文件夹中的新文件”)使用某种Comet机制工作,具有长期的HTTP连接。但令我感到惊讶的是,尽管流量很低(每分钟1次HTTP GET及其响应),TCP连接从未关闭。我可以保证连接在至少20分钟内没有关闭。

到目前为止,我的理解是,同时打开很多长期存在的TCP连接会快速消耗服务器的资源(主要是内存方面)。所以我的问题是,这种应用程序如何在长时间内有效地保持如此大量的TCP和HTTP连接同时打开?他们使用一些特殊的服务器吗?或者只是添加硬件来水平扩展?

我搜索了很多,试图找到答案,没有运气。也许我错过了一些非常明显的东西。

1 个答案:

答案 0 :(得分:1)

也许你可以看一下epoll(Linux),kqueue(freebsd),libev和libevent以获得一些想法。

来自epoll的维基百科页面:“观看的文件描述符的数量很大”。您可以使用TCP套接字替换“监视文件描述符”。