Недавно я изучил node.js, и мне весело переписывать perl-скрипты в неблокирующие скрипты. В настоящее время я пишу сценарий, чтобы выйти и подключиться к некоторым хостам и вытащить некоторые данные. Я вытаскиваю данные соединения из базы данных и хочу ограничить их соединениями x (возможно, 50) за раз, когда новые соединения запускаются, когда они завершены.Ограничение количества подключений в Node.js
Вот код, я играю с:
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. Есть ли способ сделать это?
В псевдо-болтовне: создайте объект, который содержит очередь, нажмите в очередь, добавьте событие в очередь, проверьте текущие подключения, если ниже, запустите соединение мгновенно и удалите, если выше, держитесь в очереди и на завершенных событиях данных о посылке соединения из очереди, если не пуст, и начать это соединение? – Wrikken
Я также заметил [строки потокового запроса узла-mysql] (https://github.com/felixge/node-mysql#streaming-query-rows). Возможно, я мог бы это использовать. –
@coding_hero: потоковые строки запросов, вероятно, не будут делать слишком много для вас, так как вы получите результаты с сервера MySQL * намного быстрее, чем сможете выполнять свои сетевые запросы. Другими словами, результаты SQL будут поступать в течение секунды, и вы вернетесь туда, где вы начали: одновременно добавляете тонны соединений (± 1 с). – josh3736