我创建了一个Node.js API。 当调用此API时,我会很快返回调用者。哪个好。
但是现在我还希望API能够调用或启动一个不同的API或函数,或者它自己运行的东西。有点像用child.unref()
调用子进程。事实上,我会使用child.spawn()
,但我不知道如何让spawn()调用另一个API。 也许这就是我的回答?
在这个其他过程中,我不在乎它是否崩溃或完成而没有错误。 所以它不需要附加任何东西。但是,如果它仍然附加到Node.js控制台,那么锦上添花。
我还在考虑如何识别&如果产卵以某种方式陷入运行很长时间该怎么办。但是准备好跨过这一部分。
您对我可以做些什么的想法?
答案 0 :(得分:0)
您需要准确指定其他产生的东西应该做什么。如果它使用Node.js调用HTTP API,则不应启动新进程来执行此操作。构建节点是为了异步运行HTTP请求。
正常模式,如果你真的需要在不同的进程中发生一些事情,就是使用类似消息队列,集群模块或工作人员将监视的进程之间的其他消息传递/队列,并且工作者是通常设置为以这种方式处理某些特定任务或任务集。在收到HTTP请求后生成另一个进程是非常罕见的,因为启动新进程相当重,如果不小心可能会耗尽所有服务器资源,并且由于Node的异步功能通常不是必需的特别是对于主要涉及IO的事情。
答案 1 :(得分:0)
这是我前一段时间构建的测试API。注意我甚至将一个值作为参数传递给脚本。
router.put('/test', function (req, res, next) {
var u = req.body.u;
var cp = require('child_process');
var c = cp.spawn('node', ['yourtest.js', '"' + u + '"'], { detach: true });
c.unref();
res.sendStatus(200);
});
yourtest.js
脚本可以是您想要的任何内容。但是我想如果我想将脚本视为node.js控制台桌面应用,我会更喜欢学习更多知识。 FIRST 通过从控制台的命令行yourtest.js
手动运行/测试脚本,让您的node yourstest.js yourparamtervalue
脚本无误地运行 将其整合到child.spawn()
var u = process.argv[2];
console.log('f2u', u);
function f1() {
console.log('f1-hello');
}
function f2() {
console.log('f2-hello');
}
setTimeout(f2, 3000); // wait 3 second before execution f2(). I do this just for troubleshooting. You can watch node.exe open and then close in TaskManager if node.exe is running long enough.
f1();
答案 2 :(得分:-1)
我想我可以child.spawn('node', [somescript])
你怎么看?
我必须探索我的云主机是否也允许这样做。