【发布时间】:2011-07-21 08:02:08
【问题描述】:
我试着玩了一下node.js并写了以下代码(没有意义,但没关系):
var http = require("http"),
sys = require("sys");
sys.puts("Starting...");
var gRes = null;
var cnt = 0;
var srv = http.createServer(function(req, res){
res.writeHeader(200, {"Content-Type": "text/plain"});
gRes = res;
setTimeout(output,1000);
cnt = 0;
}).listen(81);
function output(){
gRes.write("Hello World!");
cnt++;
if(cnt < 10)
setTimeout(output,1000);
else
gRes.end();
}
我知道其中有一些不好的地方(比如全局使用 gRes),但我的问题是,为什么这段代码会阻止第二个请求,直到第一个请求完成?
如果我打开网址,它会开始写“Hello World”10 次。但是,如果我在第二个选项卡中同时打开它,一个选项卡会等待连接,直到另一个选项卡完成十次“Hello World”写入。
我没有发现任何可以解释这种行为的东西。
【问题讨论】:
-
尝试从两个不同的浏览器打开,也许服务器一次处理来自同一个会话的请求。
-
嗯,很奇怪。如果我从两个浏览器打开它,它会同时工作,但会将 gRes 覆盖到第二个页面调用,但没关系(我以前见过这个问题)。但为什么它不适用于一个浏览器的两个标签页?
-
不知道为什么,因为我不熟悉
node.js,但事实证明它是正确的,将其发布为答案。 :)
标签: javascript node.js