我最近一直在阅读nodejs,试图了解它如何处理多个并发请求,我知道nodejs是一个基于单线程事件循环的架构,在给定的时间点只有一个语句将被执行,即在主线程和阻塞代码/ IO调用由工作线程处理(默认为4).
现在我的问题是当使用nodejs构建的Web服务器收到多个请求时会发生什么,我知道,有很多Stack溢出线程有类似的问题,但没有找到具体的答案.
所以我在这里举一个例子,假设我们在/ index这样的路由中有以下代码.
Run Code Online (Sandbox Code Playgroud)app.use('/index', function(req, res, next) { console.log("hello index routes was invoked"); readImage("path", function(err, content) { status = "Success"; if(err) { console.log("err :", err); status = "Error" } else { console.log("Image read"); } return res.send({ status: status }); }); var a = 4, b = 5; console.log("sum =", a + b); });
我们假设readImage()需要大约1分钟来读取该Image.如果两个请求T1和T2来得很清楚,nodejs将如何处理这些请求?
是否需要第一个请求T1,在排队请求T2时处理它(如果我的理解错误,请纠正我),如果遇到像readImage那样的任何异步/阻塞内容,它会将其发送给工作线程(稍后某点)当异步填充完成时它通知主线程并且主线程开始执行回调),通过执行下一行代码继续前进.当完成T1然后选择T2请求?这是对的吗?或者它可以在其间处理T2代码(意味着在调用readImage时,它可以开始处理T2)?
如果有人能帮我找到这个问题的答案,我真的很感激
我是Node.js的新手,刚开始使用Eclipse和Nodeclipse插件构建应用程序.当我使用Node core.js运行应用程序时它工作正常,但使用Eclipse它会显示以下错误:
/home/sarojs/projects/Core/security.js:3
class Security {
^^^^^
SyntaxError: Unexpected reserved word
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/home/sarojs/projects/node/liveprojects/ecurvInc/Core/core.js:12:16)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这里有什么问题.我搜索了解决方案并发现了一些资源意外的保留字,但我不明白如何将它合并到Eclipse中.
我的package.json看起来像这样:
{
"dependencies": {
"bluebird": "^3.4.0",
"body-parser": "~1.8.1",
"cookie-parser": "~1.3.3",
"cors": "^2.8.1",
"debug": "~2.0.0",
"express": "~4.9.0",
"express-handlebars": "^3.0.0",
"express-session": "^1.13.0",
"mysql": "^2.11.1",
"passport": "^0.3.2",
"passport-local": "^1.0.0"
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将受到高度赞赏.