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');