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 に答える