限制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中删除时才启动新的连接。 有没有办法做到这一点?

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

你可能想看看HTTP Agent类是如何实现的。 它做你想要完成的HTTP请求。