nodeJS中简单的api Web服务中的内存泄漏

时间:2014-11-24 17:38:54

标签: javascript node.js memory-leaks

var url  = require('url');
var http = require('http');
var downloader = require("./downloader");

http.createServer(onRequest).listen(8080);

    function onRequest(request,response)
    {
        if(request.method=='POST')
            handlePost(request,response);
        else
            handleGet(request,response);
    }

function handlePost(request,response)
{
    var data = '';

    request.on('data',function(chunk){
        data+=chunk.toString();
    });

    request.on('end',downloadTrainStatus);


    function downloadTrainStatus()
    {
        var downloadPromise = downloader.download(data);
        downloadPromise.then(function (responses) {
            var total = responses.length;
            var result = [];

            for( var i = 0 ; i < total ; i++)
                result.push(JSON.parse(responses[i][1]));

            response.writeHead(200);
            response.write(JSON.stringify(result));
            response.end();
          }, function (err) {
                console.log(err);
                var result = { status : "error" };
                response.writeHead(200);
                response.write(JSON.stringify(result));
                response.end();
        }) 

    }
}


function handleGet(request,response)
{
    console.log("GET request");
    response.writeHead(200);
    response.write("Get request works !!");
    response.end();
}

上述文件server.js只是启动Web服务器。它使用下面包含的文件downloader.js。 downloader.js平行地向一个返回JSON响应的url发出10或20个并行Web请求。在运行此过程半天后,该进程的内存使用量将达到1.5GB。这段代码中是否有内存泄漏?

var Promise = require('bluebird')
var request = Promise.promisify(require('request'))

function download(json)
{
  var requests = []
  var data = JSON.parse(json);
  for(var i = 0; i< data.total ; i++)
  {
    var stationCode = stations[i].StationCode;
    var journeyDay  = stations[i].JourneyDayCode;
    requests.push(downloadStatus());  
  }

  return Promise.all(requests);

}

function downloadStatus()
{
  var url = "http://google.com";
  var headers = {'User-Agent' : 'Apache-HttpClient/UNAVAILABLE (java 1.4)'};
  var options = {
                 url: url , 
                 headers: headers,
                 timeout: 15 * 1000
                }
  return request(options);
}

module.exports.download = download;

0 个答案:

没有答案