Node.js请求数据被破坏

时间:2015-04-30 06:16:01

标签: javascript node.js express

我是Node.js的新手。

我通过Node.js从其他服务器获取数据:

function get_data(data_url, a, callback) {
    console.log('dataurl = ' + data_url);
    rem_url = url.parse(data_url);

    console.log('hostname = ' + rem_url.hostname);
    console.log('host = ' + rem_url.host);
    console.log('path = ' + rem_url.path);
    options = {
        hostname: rem_url.hostname,
        path: rem_url.path,
        keepAlive: true
    };

    request = http.request(options, function (res) {
        data = '';
        res.on('data', function (chunk) {
            data = data + chunk;
            sleep(20);
        });

        res.on('end', function () {
            callback(a, data);
        });

        res.on('error', function (err) {
            console.log("Error Occurred: " + err.message);
        });
    });

    request.on('error', function (e) {
        console.log('dataurl = ' + data_url);
        console.log('a = ' + a);
        console.log('problem with request: ' + e.message);
    });

    request.end();
}

我收到数据损坏,所以我插入了一个睡眠功能:

res.on('data', function (chunk) {
    data = data + chunk;
    sleep(20);
});

我仍然想知道是否有更好的方法? 非常感谢你!

注意:这是我的睡眠功能:

function sleep(milliseconds) {
    var start = new Date().getTime();
    for (var i = 0; i < 1e7; i++) {
        if ((new Date().getTime() - start) > milliseconds){
            break;
        }
    }
}

更多详情:

  • Avarage数据从1个请求中提取5000~5500个字符
  • 我提出500个请求
  • 所以总数据长度变为2700285
  • 数据是base64编码的
  • 没有睡眠功能%10的数据被破坏
  • with sleep(1)中断数据减少到%5
  • with sleep(10)中断数据减少到%2
  • with sleep(20)中断数据减少到%1
  • 如果我增加睡眠时间,我会得到更好的结果。

1 个答案:

答案 0 :(得分:1)

在阅读您的代码时,我注意到即使有相同的评论, 你需要在函数内设置数据而不是在外面。 所以它成为局部变量。 在您的函数数据变量是全局的。 因为sleep()函数可以获得更好的效果; javascript需要一些时间来覆盖全局数据。这解释了为什么你会得到更好的结果。 只需这样写,然后从js文件的上一行删除var data;

var data = '';
res.on('data', function (chunk) {
       data = data + chunk;

});