我想我刚刚发现 node.js 或浏览器有些奇怪。所以 node.js 应该是非阻塞的,但是一个简单的 setTimeout 会为同一个客户端阻塞整个网站。
这是服务器代码:
// Create HTTP Server
var http = require('http');
// Create page number holder
var page = 0;
http.createServer(function (req, res) {
// Increment Page Number
page++;
// Log page load
console.log('LOAD PAGE', page);
// Set response header
res.writeHead(200, {'Content-Type': 'text/plain'});
// Wait 10 seconds and write Hello World message to client.
setTimeout(function(){ res.end('Hello World\n'); }, 10000);
}).listen(5000); // Listen on port 5000
// Log server start
console.log('Server running on port 5000.');
所以我要说的是,当我尝试用两个选项卡在 Chrome(版本 25.0.1364.152)中打开http://mysite.com:5000/时,第一个选项卡必须在节点处理第二个选项卡之前完成.js。
它看起来像这样:
Client: Open Tab1
> server console: LOAD PAGE 1
Client: Open Tab2
> server console: Nothing happens
Server: Wait 10 seconds
> server console: LOAD PAGE 2
我希望 node.js 立即运行这两个请求,否则这不是非阻塞的。我已经用 Firefox 19 对此进行了测试,因此浏览器的行为似乎与此相同。
那么发生了什么?我错过了什么吗?:OOOO
更新
我只是在 Safari(6.0.2) 中运行测试并且它工作正常,所以这可能是 Chrome 和 Firefox 以及其他浏览器的问题。
使用 Node.js 版本v0.6.17和v0.8.21测试