我有一个node.js脚本,它连续请求一个页面,有点像cron作业。
然而,几分钟后,节点开始使用大量的CPU(高达70%)和内存(高达200MB)。
我的剧本怎么了?
function cron(path)
{
var http = require('http');
var site = http.createClient(443, 'www.website.com', true);
var request = site.request('GET', path, {'host': 'www.website.com'});
request.end();
request.on('response', function (response) {
setTimeout(function(){cron(path)},15000);
});
}
cron('/path/to/page');
最佳答案
request.on('response', function (response) {
setTimeout(function(){cron(path)},15000);
});
为每个响应创建一个新的
cron
作业。记录你的回答。如果你从你的请求中得到了多于1的信息,那么你将创建更多的cron作业。创建一个引用
function() {}
的path
。所以整个作用域状态保持不变。要释放内存,请添加以下内容:var site = null;
var request = null;
在函数内部调用,而不是在模块范围外部调用。您只需要得到
require("http")
一次,因此将其放在模块范围内的文件顶部。var http = require('http');
var site = http.createClient(443, 'www.website.com', true);
function cron(path)
{
var request = site.request('GET', path, {'host': 'www.website.com'});
request.end();
var once = true;
request.on('response', doIt);
function doIt(response) {
if (!once) {
once = null;
doIt = function() {};
setTimeout(function(){cron(path)},15000);
}
});
site = null;
request = null;
}
cron('/path/to/page');