如何在node.js中检查打开连接的数量?

12

我有一台运行Node.js(版本为0.1.32)的机器,其中有一个TCP服务器(tcp.createServer)和一个HTTP服务器(http.createServer)。端口80上的comet应用程序会发送持续50秒的长轮询请求到HTTP服务器。同时,来自iPhone应用程序的TCP套接字连接也会在端口8080上进行相同的操作。

发现服务器在一段时间内无法处理更多的连接(尤其是TCP连接),只能通过重启才能恢复正常状态。但HTTP连接似乎表现良好!?

为了测试连接负载,我创建了一个TCP服务器并生成了2000个请求。发现当达到机器上的最大文件描述符限制(默认为1024)时,连接开始出现故障。这是一个非常小的数字。

那么,作为新手的问题是:如何扩展我的应用程序以处理更多的Node.js连接,并解决此问题。

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

谢谢 Sharief

3个回答

4
嘿Joey!我正在寻找一个Unix解决方案,可以帮助我在任何时候查看我的计算机上有多少个打开的连接。原因是在一定数量的连接后,我的服务器无法处理请求。我发现我的机器一次只能处理1024个打开的连接,即默认为1024的ulimit文件描述符值。我通过设置ulimit -n来修改此值以适应我的要求。
因此,为了检查打开的连接,我使用了lsof,它给出了打开文件的列表,并确定了我正在使用的每个端口打开了多少个连接。

4

您可以使用以下方式获取连接数:

var server = http.createServer(app);     
server.getConnections(function(error, count) {
    console.log(count); 
});

使用该方法,您可以检查连接并在其超过阈值时关闭先前的连接。希望对您有所帮助。


2
我不知道是否有内置的方法来获取Node中活动连接的数量,但很容易设置一些东西来解决这个问题。
对于我的类似彗星的Node应用程序,我保留一个对象,将连接添加为属性。每X秒,我遍历该对象并查看是否有应该关闭的任何连接(在您的情况下,超过50秒的任何内容)。
当您关闭连接时,只需从连接对象中删除该属性即可。然后,您可以使用 Object.size(connections) 来查看任何时候有多少连接处于打开状态。

1
对于这个解决方案,我想象客户端必须发送某种心跳来更新他们是否仍处于活动状态? - rlemon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接