【发布时间】:2014-03-21 11:06:11
【问题描述】:
Node.js 以并发而闻名,但是,我对如何使其同时工作感到困惑。我非常快速地从 Chrome 中一一启动了两个请求,我预计控制台中的输出应该是:
- “获取新请求”
- 在我的第二个请求之后,应立即打印“get a new request”
- 几秒钟后,“结束新请求”
- 几秒钟后,“结束新请求”
然而,我看到的是:
- “获取新请求”
- 几秒钟后,“结束新请求”
- “获取新请求”
- 几秒钟后,结束新请求
这意味着在第一个请求完成之前不会处理第二个请求。下面是我的示例代码,有什么遗漏的吗?
var http = require("http");
var url = require("url");
function start(route) {
http.createServer(function(request, response) {
console.log('get a new request');
// a time consuming loop
for (var i=0; i<10000000000; ++i) {
}
route(url.parse(request.url).pathname);
response.writeHead(200, {"Content-Type": "text/plain"});
response.end();
console.log('end the new request');
}).listen(5858);
}
function saySomething(something) {
console.log(something);
}
exports.start = start;
exports.saySomething = saySomething;
【问题讨论】:
-
node.js 以其异步模型而闻名,我认为,而不是它的并发模型。在这种情况下,“服务器”应该处理回调。
标签: node.js concurrency