2013-04-06 14 views
6

Nota: questo non è un post replicato per quelli su settimeout, la risposta chiave qui è le opzioni di progettazione del browser. studioperché settimeout blocca eventloop

Sto iniziando Node.JS: Un semplice esempio per testare asincrona:

var http=require('http'); 

http.createServer(
    function(request, response){ 


     response.writeHead(200); 
     response.write("Hello, dog is running"); 
     setTimeout(
      function(){ 
       response.write("Dog is done"); 
       response.end(); 
      }, 
      10000 
     ); 

    } 
).listen(8080); 
console.log("Listen on port 8080") 

Una cosa interessante è il suo comportamento è differernt quando al comando Lind con l'arricciatura e browser: In Ubuntu 12.10, Uso curl localhost: 8080 in due console, risposta in quasi 10 mandate.

Tuttavia, apro due browser, effettuo la richiesta quasi contemporaneamente, ma l'intera procedura mi ha richiesto 20 secondi?

grazie.

+0

possibile duplicato di [blocchi di una richiesta Nodejs altre richieste] (http://stackoverflow.com/questions/12197064/nodejs-one-request-blocks-another-requests) –

+0

@MattBall, non credo che sia un duplicare. Questo non esegue l'elaborazione intensiva della CPU. Inoltre, funziona correttamente usando CLI (arricciatura) per me, ma non in Firefox. – Dogbert

+0

Sembra che il browser non invii la seconda richiesta fino alla fine del primo. Se aggiungi un'istruzione di registro all'inizio del gestore, lo dimostrerà. – Dogbert

risposta

19

E 'l'attesa del browser, non node.js

Se si esegue il server e richiedere http://localhost:8080/ in due schede ci vogliono 20 secondi perché il browser attende la prima richiesta allo stesso URL prima di iniziare la seconda.

Se si esegue il server e si richiede http://localhost:8080/1 e http://localhost:8080/2 in due schede ci vogliono ancora 10 secondi.

+0

Puoi dirmi di più su come funziona il browser? Perché non possono aprire lo stesso URL con le schede contemporaneamente? – Kuan

+2

Chrome non invia richieste contemporaneamente allo stesso URL, è una scelta di implementazione. – Mustafa