1

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

4

1 回答 1

1

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

您可能想看看HTTPAgent是如何实现的。它可以完成您尝试为 HTTP 请求完成的工作。

于 2013-09-23T22:46:33.800 回答