【发布时间】:2015-03-11 06:01:27
【问题描述】:
所以目前我有这个功能
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 发出请求。我知道节点是单线程的,但是有没有办法并行/同时运行它?还是我只需要改变我的设计策略?
编辑:requestItems 函数:http://pastebin.com/Eif5CeEv
【问题讨论】:
-
仅供参考,看起来您正在为每个新的
/requestItems请求添加新的 eventEmitter 事件处理程序。我认为这意味着您在同一个 eventEmitter 上堆积了多个事件处理程序。 -
@jfriend00 我该如何解决这个问题?
-
我没有很好地遵循您尝试对代码执行的操作,但您可能需要为每个活动请求一个新的 eventEmitter,而不是一个全局的,然后您需要确保您永远不会复制任何事件处理程序。
-
但是如果我将 eventEmitter 移动到全局状态,我将如何发送响应?例如,如果我在这里移除发射器,那么我将没有响应范围。 i.imgur.com/2yVSkuj.png
-
您将响应变量传递给任何想要创建并发送响应的代码。
标签: node.js events express concurrency parallel-processing