考虑以下示例:(假设快递可用)
示例1:
app.get("/a", function(res){
// Some-Blocking function for 10 seconds
res.send("done");
});
app.get("/b", function(res){
res.send("done");
});
在这个例子中,如果首先请求/ a,那么1秒后/ b;直到/ a完成后才处理/ b?如果它是一个线程,它应该是。那么消除这个问题的方法是什么?
示例2:
app.get("/a", function(res){
// Some-Library-Database function
db.find({"user.id" : 5}, function(data){
res.send(data);
});
});
app.get("/b", function(res){
res.send("done");
});
同样,/ a被请求进入函数,调用db.find,所以当db.find完成时,回调执行A的res.send(数据)。所以,我们可以在不等待的情况下响应/ b请求,对吗? (如果我错了,请纠正我)
那么,我们如何实现例1中的例2呢?我们可以使阻塞功能也运行异步吗?或者DB正在执行IO(通过TCP向服务器等发送命令)使函数异步?我的意思是,在nodejs,s IO中唯一的异步是什么?如果需要大量计算,我们是否必须发出IO请求?
我正在尝试根据概念学习和构建。我已阅读NodeJS is cancer帖子,阅读关于Node的批评,不确定他是否只是在拖钓。
答案 0 :(得分:1)
b.on('message', function(reply) {...}});
通过这种方式,您可以在阻止处理程序中按顺序处理所有内容,并且仍允许客户端不使用“阻止”代码在父“app.js”中处理
编辑:更新的文档链接