【问题标题】:node.js + express + threads_a_gogo blocking requestsnode.js + express + threads_a_gogo 阻塞请求
【发布时间】:2013-12-22 09:48:33
【问题描述】:

我在节点 js 中有一段代码需要几秒钟才能完成,所以我开始使用 threads_a_gogo 模块(https://github.com/xk/node-threads-a-gogo)来不阻止 http 请求。我花了很多时间试图弄清楚为什么威胁生成不起作用,因为我的请求仍然被阻止。

app.post('/results.html', function(req, res){ 如果(配置调试) console.log("线程创建"); var t = 线程.create(); var r = 新回合(); t.eval(r.start(req,res), function(err, result) { r.finish(res); //t.destroy(); 如果(配置调试) console.log("线程销毁"); }); console.log("请求完成"); });

console.log("请求完成");仅在新线程完成后显示,但假设几乎在请求完成时显示,并且它对服务器的阻塞请求直到进程完成。

知道我做错了什么吗?

谢谢

【问题讨论】:

  • 你想完成什么?也许有比使用这个模块和方法更简单/更好的方法
  • @ Jamis Charles r.start 总是需要几秒钟来回答,这就是为什么我想把它放在一个新线程中。理论上,该模块应该将该“任务”置于后台并允许其他请求到达而不是阻塞主节点线程。我想使用线程而不是处理,所以“集群”模块对我没有用。不,我不能触摸 r 对象以使其更快并且不使用线程。
  • 如果你需要线程,不要使用node.js

标签: multithreading node.js express


【解决方案1】:

你实际上是在主线程中执行r.start(req,res),然后将返回值传递给t.evaleval 接受一个字符串,然后在线程全局范围内执行。像这样的东西应该可以工作:

t.eval('var start =' + r.start.toString()).eval('start()'), function(err, result) { });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 2022-01-21
    • 2013-11-12
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多