【问题标题】:How to check the number of open connections in node.js?如何检查 node.js 中打开的连接数?
【发布时间】:2011-03-13 23:15:18
【问题描述】:

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

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

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

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

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

谢谢 谢里夫

【问题讨论】:

    标签: javascript comet node.js file-descriptor evented-io


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 对于这个解决方案,我想象客户端必须发送某种心跳来更新它们是否仍然处于活动状态?
        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2016-04-24
        • 2015-12-23
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多