我想将一些管理实用程序添加到一个小型 Web 应用程序中,例如“备份数据库”。用户将单击一个按钮,HTTP 响应将立即返回,尽管可能长时间运行的进程已在后台启动。
在 Java 中,这可能通过生成一个独立的线程来实现,在 Scala 中则使用 Actor。但是在 node.js 中什么是合适的习语? (感谢代码片段)
我现在正在重新阅读文档,这确实看起来是一个 Node 101 问题,但这几乎就是我在这个问题上的位置......无论如何,澄清这是基本场景:
function onRequest(request, response) {
doSomething();
response.writeHead(202, headers);
response.end("doing something");
}
function doSomething(){
// long-running operation
}
我希望响应立即返回,让 doSomething() 在后台运行。
好的,考虑到 Node 的单线程模型,如果不产生另一个操作系统级的 ChildProcess 似乎是不可能的。我的误会。
在我的代码中,我需要的备份主要是基于 I/O 的,因此 Node 应该以一种很好的异步方式处理它。我想我要做的是将 doSomething 转移到 response.end 之后,看看它的行为如何。
最佳答案
正如 supertopi 所说,您可以查看 Child process .但我认为如果这种情况连续发生很多,它会损害服务器的性能。那么我认为您应该将它们排队。我想你应该看看asynchronous message queues离线(分布式)处理您的工作。一些(仅举两个例子)消息队列的例子是 beanstalkd , gearman .
关于multithreading - "Spawn a thread"类似 node.js 中的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10042648/