同时调用Express获取命令

时间:2015-03-11 06:01:27

标签: node.js events express concurrency parallel-processing

所以目前我有这个功能

app.get('/requestItems', function(req, res){
//Check if Bots are online
if(botQueue.length == 0){
  //If there are no bots in the queue to take the order, then we can't process it.
  console.log("Sorry no bots available");
  res.send("No Bots available ATM");
  return;
} else {
  var currentBot = botQueue.shift();
}
requestItems(currentBot.offerInstance, steamIDtoTrade, itemID, userAccessToken);

eventEmitter.on('requestOfferExpired', function(){
  console.log("Request offer has timed out/been cancelled");
  res.send("Request offer has timed out/been cancelled");
  botQueue.push(currentBot);
});
eventEmitter.on('requestOfferAccepted', function(){
  console.log("Request offer has completed");
  res.send("Request offer has completed");
  botQueue.push(currentBot);
});

});

当我打电话时,大约需要5分钟才能运行。在运行时,我似乎无法向URL发出请求。我知道node是单线程的,但有没有办法并行/同时运行它?或者我只是需要改变我的设计策略?

编辑:requestItems函数:http://pastebin.com/Eif5CeEv

1 个答案:

答案 0 :(得分:0)

如果每个请求的5分钟是没有IO运行的node.js的100%CPU,那么在此期间您将不会处理任何其他请求,并且您将需要运行多个节点进程(可能在集群中)为了在此期间处理多个请求。

另一方面,如果5分钟的大部分时间都在进行IO(磁盘,数据库或套接字),那么正确的异步IO设计将允许您的节点服务器在此期间处理许多请求。

由于您似乎不可能在没有IO的情况下连续5分钟对CPU进行数字处理,我的猜测是您需要切换到正确的异步IO设计,然后您可以使用node.js的优点并且可以同时处理许多不同的请求。


您需要披露更多关于5分钟内发生的事情,以便我们更具体地帮助您。关于那5分钟的一些问题:

  1. 什么类型的操作需要5分钟的时间?
  2. 您是否正在使用node.js异步磁盘IO和异步数据库IO,以便在给定请求等待IO时允许其他node.js事件流动?
  3. 您的请求处理策略是否设计为同时处理多个请求?
  4. 你能告诉我们5分钟的代码吗?