2013-04-15 86 views
0

我剛開始通過node.js中去新手引導單個請求上的阻止操作是否阻止從開始的所有其他請求?

http://www.nodebeginner.org

,想知道是否有任何實例或方法,我可以親身體驗,如果單個請求阻塞操作會阻止其他請求從開始。本質上,我想打開兩個不同的瀏覽器並從一個瀏覽器觸發阻止操作,然後訪問另一個瀏覽器並觀察我被阻止,直到第一個請求完成。

也因爲這個代碼片段

var http = require("http"); 
function onRequest(request, response) { 
    response.write("Hello World"); 
    response.end(); 
} 
http.createServer(onRequest).listen(8888); 

不應該onRequest函數接受參數,如果它要叫什麼?

http.createServer(onRequest(request, response)).listen(8888); 

回答

3

對於標題中的問題,是的。你可以嘗試一下,說,有這樣的:

function onRequest(req, res) { 
    if(req.url === '/block') { 
     while(true) {} 
    }else{ 
     res.end("Still accepting requests…"); 
    } 
} 

然後去http://localhost:8888/block在一個瀏覽器和其他http://localhost:8888/。後一個請求不會產生迴應。 (對於這個問題,第一個也不會。)

對於你的其他問題,沒有;你不會調用onRequest並將返回值傳遞給createServer,而是將該函數本身傳遞給createServer

在JavaScript中,函數是一流的,也就是說它們是一個像其他任何對象一樣的對象:您可以將它們作爲參數傳遞,將它們放入變量或其他對象中,等等。如果您習慣於C可以把它看作是一個函數指針,除了可能帶有一個隱式的上下文參數以及它的引用到其封閉的詞法範圍的變量之外。

+0

+1。每次需要處理請求時,服務器都會調用onRequest。 – Thilo