10

我有一台运行 node.js (v0.1.32) 的机器,带有一个 tcp 服务器 (tcp.createServer) 和一个 http 服务器 (http.createServer)。http 服务器受到来自基于彗星的应用程序在端口 80 上的长轮询请求(每个持续 50 秒)的影响。并且出于相同目的,来自 iphone 应用程序的端口 8080 上有 tcp 套接字连接。

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

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

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

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

谢谢谢里夫

4

3 回答 3

4

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

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

使用它,您可以继续检查连接,当它超过阈值时,然后关闭以前的连接。希望能帮助到你。

于 2020-01-06T04:46:34.497 回答
3

嘿乔伊!我一直在寻找一个 unix 解决方案,它可以帮助我确定在给定时刻在我的机器上任何时候有多少打开的连接。原因是我的服务器在一定数量的连接后无法处理请求。并认为我的机器一次只能处理 1024 个打开的连接,即默认为 1024 的 ulimit 文件描述符值。我通过设置 ulimit -n 修改了这个值,以满足我的要求。

因此,为了检查打开的连接,我使用了 lsof,它为我提供了打开文件的列表,并计算了通过我使用的每个端口打开了多少连接。

于 2010-07-15T06:11:25.210 回答
2

我不知道是否有一种内置方法可以获取与 Node 的活动连接数,但是很容易安装一些东西。

对于我的彗星式节点应用程序,我保留了一个对象,我将连接添加到该对象作为属性。每隔 X 秒,我会遍历该对象并查看是否有任何应该关闭的连接(在您的情况下,任何超过 50 秒限制的连接)。

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

于 2010-07-14T14:24:02.853 回答