[英]How does a Node.js server process requests?
假设我有以下代码。 我正在使用ExpressJS,但我认为服务器部分与普通Node.js没有太大区别。
var express=require('express');
var settings=JSON.parse(fs.readFileSync('settings.json','utf8')); // does this run only once (when the server starts)?
app.get('*',function(req,res){
res.write(fs.readFileSync('index.html')); // does this block other requests?
setTimeout(function(){
someSlowSyncTask(); // does this block other requests?
},1000);
res.end();
});
在上面的示例中,第一个readFileSync
是在服务器启动时运行一次还是在服务器每次收到请求时运行?
对于第二个readFileSync
,是否阻止Node处理其他请求? 换句话说,是否所有其他请求都必须等到readFileSync
完成后才能由Node处理?
编辑:我添加了setTimeout
和someSlowSyncTask
。 他们会阻止其他请求吗?
没错 首次启动服务器时,您的第一个readFileSync
将执行一次。
每次收到请求时都会发生第二次readFileSync
,但是由于它存在于res.end()
的回调中(请记住res.end()
本质上是非阻塞的),因此您可以在非阻塞状态下接收任意数量的请求只要您的内部函数也被编写为非阻塞的(例如,具有回调),它就会流行。 但是,就您而言,超时不是异步写入的,因此将阻止服务器响应,直到完成为止。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.