Sono nuovo su node.js, ho provato a utilizzare setTimeout per simulare connessioni lunghe e sperare che funzioni in modo asincrono.come utilizzare setTimeout in modo asincrono su node.js
var http = require('http');
http.createServer(function (request, response) {
console.log('New request @ ' + request.url);
(function (response) {
setTimeout(function() {
console.log('Time is up');
response.writeHead(200, {"Content-Type": "text/plain"});
response.end('Hello World\n');
}, 3000);
})(response);
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
Tuttavia, il codice riportato sopra funziona come un'app sincrona a thread singolo, che può gestire solo una richiesta ogni 3 secondi.
Ho pensato che tutto in node.js dovrebbe agire in modo asincrono. Quindi, qual è il problema qui?
Ho provato con ab, e hai ragione, setTimeout è una funzione asincrona. Ma, è un po 'strano se apro diverse schede in Chrome allo stesso tempo, finisce uno ad uno tra un intervallo di 5 secondi. – Jack
Penso che non sia sufficiente fare un rapido clic tra le schede in chrome .. :) – balazs
Chrome non richiederà lo stesso URL contemporaneamente. Se aggiungi una variante all'URL, ad es. la prima scheda richiede http://127.0.0.1:8124/0, la seconda richiede http://127.0.1.18124/1, ecc., quindi dovrebbero comportarsi come ci si aspetta. Vedi http://stackoverflow.com/questions/15852011/why-settimeout-blocks-eventloop – Jason