我最近学习了 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 中删除时才开始新的连接。有没有办法做到这一点?