Javascript 节点js工作人员应增加传出https get请求
我的设置是https模块,使用Javascript 节点js工作人员应增加传出https get请求,javascript,node.js,redis,Javascript,Node.js,Redis,我的设置是https模块,使用工作线程模块和redis队列作为url列表。单个工作进程每秒最多可以处理800个传出https get请求。我的计划是增加员工数量,增加传出请求。但实际发生的情况是,发出的请求在每个工作人员身上被分开 因此,如果我运行4个worker,每个worker只处理200个传出https get请求。我以为它是800的4倍,所以每秒总共有2400个传出https get请求。Ubuntu打开文件的限制是65000,所以我已经检查过了。Node js脚本在没有nginx或任何
工作线程模块和redis队列作为url列表。单个工作进程每秒最多可以处理800个传出https get请求。我的计划是增加员工数量,增加传出请求。但实际发生的情况是,发出的请求在每个工作人员身上被分开
因此,如果我运行4个worker,每个worker只处理200个传出https get请求。我以为它是800的4倍,所以每秒总共有2400个传出https get请求。Ubuntu打开文件的限制是65000,所以我已经检查过了。Node js脚本在没有nginx或任何其他负载平衡器的情况下运行
这是我的密码,请告诉我哪里做错了
主文件
const { Worker, isMainThread, parentPort } = require("worker_threads");
function createWorker() {
var worker = new Worker("./wxr.js", { workerData: {} });
worker.on("error", (err) => {
throw err;
});
worker.on("message", callback);
return worker;
}
function callback(data) {}
function spyder(works) {
var workers = [];
for (i = 1; i < works + 1; i++) {
var count = i;
workers[count] = createWorker();
}
var workers = 4;
spyder(workers);
}
const https = require("https");
const { parentPort, workerData } = require("worker_threads");
const redis = require("redis");
const client = redis.createClient();
var max = 0;
function start() {
var itv = setInterval(function () {
max++;
loop();
if (max == 100) {
clearInterval(itv);
}
}, 0);
}
start();
function loop() {
client.lpop(["urls"], function (err, url) {
if (err) {
return loop();
} else if (url == null || url == undefined || url == "" || url == " ") {
return loop();
} else {
easyReq(url, function (error, response, body) {
return loop();
// easyReq is just a wrapper for the https module get request function I wrote
});
}
});
}