2016-08-02 73 views
2

我的例子是一個簡單的HTTP服務器:困惑節點順序規則(同步/異步)

http.createServer((req, res) => { 
    if(req.method === `GET`){ 

    if(req.headers.cookie === undefined){ 
     let x = 1 
     let y = 2 
     let z = 30 
    } 
    else{ 
     let x = 10 
     let y = 20 
     let z = 3 
    } 

    switch(req.url){ 

     case `/`: 

     // >>>> I need the appropriate variables here for the same client <<<< 

     break 

     case `/page`: 

     // >>>> or here <<<< 

     break 

     default: 
     res.statusCode = 404 
     res.end(`Error 404`) 
    } 
    } 
}).listen(3000) 

當客戶端連接,該變量是由所述客戶端是否具有一個cookie限定。但是如果多個客戶端幾乎同時連接會怎樣?節點如何處理?

客戶端是否有可能混淆變量,因爲if/else語句在切換之前發生?我應該在每個if/else部分中放置2個開關副本嗎?

還是沒有區別?

回答

0

每個連接都是Node中自己的「堆棧」,因此它們將是獨立的。實際上,每個連接都有自己的req對象的副本/實例,並且您編寫的代碼僅適用於req對象。存在的所有其他req對象都是它們自己的堆棧。

該代碼將按順序發生,因此您可以安全地在切換前擁有if/else。