我最近学习了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中删除时才开始新的连接。有没有办法做到这一点?
答案 0 :(得分:1)
这很简单 - 保持要连接的主机队列,并且一次只打开 n 连接。当连接完成(或失败)时,启动队列中的下一个。
您可能想了解HTTP Agent
class的实施方式。它完成了您为HTTP请求尝试完成的任务。