所以目前我有这个功能
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
答案 0 :(得分:0)
如果每个请求的5分钟是没有IO运行的node.js的100%CPU,那么在此期间您将不会处理任何其他请求,并且您将需要运行多个节点进程(可能在集群中)为了在此期间处理多个请求。
另一方面,如果5分钟的大部分时间都在进行IO(磁盘,数据库或套接字),那么正确的异步IO设计将允许您的节点服务器在此期间处理许多请求。
由于您似乎不可能在没有IO的情况下连续5分钟对CPU进行数字处理,我的猜测是您需要切换到正确的异步IO设计,然后您可以使用node.js的优点并且可以同时处理许多不同的请求。
您需要披露更多关于5分钟内发生的事情,以便我们更具体地帮助您。关于那5分钟的一些问题: