2010-07-09 73 views
8

我有一台机器使用tcp服务器(tcp.createServer)和http服务器(http.createServer)运行node.js(v0.1.32)。 http服务器被来自基于彗星的应用程序在端口80上的长轮询请求(每个持续50秒)命中。并且为了相同的目的,在iphone应用程序的端口8080上存在tcp套接字连接。如何检查node.js中打开连接的数量?

发现服务器无法处理更多的连接(特别是TCP连接,而http连接看起来很好!! ??)一段时间,只有重新启动后才正常。

对于负载测试连接我创建了一个tcp服务器并产生了2000个请求,并指出在达到机器上的最大文件描述符限制(缺省值为1024)之后连接开始失败。这是一个非常小的数字。

所以,这里有一个新手问题:如何扩展我的应用程序以处理node.js上更多数量的连接以及如何处理此问题。

有没有办法找出当前有多少活动连接?

感谢 沙里夫

回答

3

嘿乔伊!我正在寻找一个unix解决方案,它可以帮助我找出在我的机器上的某个特定时刻打开的连接数。原因是我的服务器在一定数量的连接之后无法处理请求。并认为我的机器一次只能处理1024个打开的连接,即默认为1024的ulimit文件描述符值。我通过设置适合我需求的ulimit -n来修改此值。

因此,要检查打开的连接,我使用了lsof,它给了我打开的文件列表,并确定通过我使用的每个端口打开了多少个连接。

2

我不知道是否有一个内置的方式来获得与节点的活动连接数,但它是很容易操纵的东西了。

对于我的comet风格的Node应用程序,我保留一个对象,将其作为属性添加到连接。每X秒我遍历该对象,看看是否有任何连接应该被关闭(在你的情况下,任何超过50秒限制的连接)。

关闭连接时,只需从连接对象中删除该属性即可。然后你可以看到有多少连接随时打开Object.size(connections)

+0

这个解决方案我想象客户端必须发送某种心跳来更新它们是否仍然活动? – rlemon 2012-04-17 18:45:07