文章标题

1.异步回调原生写法

serverClient.get("http://localhost:3001/test/test.php?page=1&page_count=1", function (err,res,data1) {
    // something
    serverClient.get("http://localhost:3001/test/test.php?page=2&page_count=1", function (err,res,data2) {
        // something
        serverClient.get("http://localhost:3001/test/test.php?page=3&page_count=1", function (err,res,data3) {
            // something
            console.log(data1);
            console.log(data2);
            console.log(data3);
        });
    });
});
console.log('showFirst');

2.eventproxy 控制并发

var eventproxy = require('eventproxy');
var ep = new eventproxy();
ep.all('data1_event', 'data2_event', 'data3_event', function (data1, data2, data3) {
    console.log(data1);
    console.log(data2);
    console.log(data3);
});

serverClient.get('http://localhost:3001/test/test.php?page=1&page_count=1', function (err,res,data) {
    ep.emit('data1_event', data);
});

serverClient.get('http://localhost:3001/test/test.php?page=2&page_count=1', function (err,res,data) {
    ep.emit('data2_event', data);
});

serverClient.get('http://localhost:3001/test/test.php?page=3&page_count=1', function (err,res,data) {
    ep.emit('data3_event', data);
});

console.log('showFirst');

3.async(可控制并发数量)

var async = require('async');
var maxCount = 0;
var pageArr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];

async.mapLimit(pageArr, 5, function (id, callback) {
    getdata(id, callback);
}, function (err, result) {
    console.log('final:');
    console.log(result);
});

function getdata(id,callback) {
    var delay = parseInt((Math.random() * 10000000) % 2000, 10);
    maxCount++;
    var url = "http://localhost:3001/test/test.php?page="+id+"&page_count=1";
    console.log('现在的并发数是', maxCount, ',正在抓取的是', url);
    setTimeout(function () {
        serverClient.get(url, function (err,res,data) {
            maxCount--;
            callback(null,data);
        });
    }, delay);
}

4.fibers(异步转同步)

var fiber = require('fibers');
function getDataOnFiber(req,res,type,url) {
    let fiber = Fiber.current;
    let l = {};

    serverClient.get(url).then(
        result=>{
            if(result.res.statusCode == 200){
                l={code:200,data:result.body};
            }else{
                l={code:result.res.statusCode};
            }
            fiber.run();
        },
        err=>{
            console.log(err);
            l={code:500};
            fiber.run();
        }
    );
    Fiber.yield();
    return l;
}
Fiber(() => {
    var url = 'http://10.10.20.78/test/test.php';
    let result  = getDataOnFiber(req,res,config.serverType.engine1_6,url+"?page=1&page_count=1");
    let result2  = getDataOnFiber(req,res,config.serverType.engine1_6,url+"?page=2&page_count=1");
    let result3  = getDataOnFiber(req,res,config.serverType.engine1_6,url+"?page=3&page_count=1");
    console.log(result);
    console.log(result2);
    console.log(result3);
}).run();

console.log('showFirst');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值