限制Node.js中的连接数

时间:2013-09-23 22:37:16

标签: node.js

我最近学习了node.js,我很乐意将perl脚本重写为非阻塞脚本。我目前正在编写一个脚本来连接到一些主机并提取一些数据。我从数据库中提取连接数据,并希望一次将其限制为x连接(可能是50个),当一个连接完成时,新连接就会启动。

这是我正在玩的代码:

var net = require('net');
var mysql = require('mysql');
var mysql_conn = mysql.createConnection({
    //connection info...
});

var connect_hash ={};


function make_connection (id, ip, port, username, password, cb) {
        var conn = net.createConnection(port, ip);
        var completeData = '';
        connect_hash[id] = {};
        connect_hash.id.ip = ip;

    // stuff happens here..
}


mysql_conn.query("select id, IP, Port, Username, Password from Hosts",
  function (err, ne_records, fields){
        if (err) throw err;

        ne_records.forEach(function(host){
                make_connection(host.id, host.IP, host.Port, host.Username, host.Password, function(attempt) {
                        delete connection_hash[id];
                        db_save (attempt);
                });
        });
});

正如现在所写,它只是打开与表中每个主机的连接并对它们进行操作。我真的希望它一次打开一个指定的数字,只有当旧的连接完成并从connection_hash中删除时才开始新的连接。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

这很简单 - 保持要连接的主机队列,并且一次只打开 n 连接。当连接完成(或失败)时,启动队列中的下一个。

您可能想了解HTTP Agent class的实施方式。它完成了您为HTTP请求尝试完成的任务。