我試着打了一下使用的是Node.js和寫下面的代碼(它沒有任何意義,但是,這並不重要):爲什麼這個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倍的URL。但是如果我在第二個選項卡中同時打開它,一個選項卡將等待連接,直到另一個選項卡完成十次寫入「Hello World」。
我發現沒有任何東西可以解釋這種行爲。
嘗試打開也許服務器處理在一個時間從同一個會話中的一個請求。 –
hm很奇怪。如果我從兩個瀏覽器中打開它,它可以同時工作,但會覆蓋gRes到第二個頁面調用,但那是好的(我以前見過這個問題)。但是,爲什麼它不適用於一個瀏覽器的兩個選項卡? – Fender
說不上來爲什麼,因爲我不太熟悉'node.js'然而,因爲它被證明是正確的,張貼作爲答案。 :) –