80 votes

Comment dormir le fil dans node.js sans affecter les autres threads?

Que par la Compréhension de la node.js boucle d'événements, node.js prend en charge un seul modèle de thread. Cela signifie que si je fais plusieurs demandes pour un node.js serveur, il ne sera pas générer un nouveau thread pour chaque demande, mais seront exécutées à chaque demande, un par un. Cela signifie que si je ne les suivants: pour la première demande dans mon node.js code, et en attendant une nouvelle demande arrive sur le nœud, la deuxième demande doit attendre jusqu'à ce que la première demande complète, y compris de 5 secondes, le temps de sommeil. Droit?

var sleep = require('sleep');
    sleep.sleep(5)//sleep for 5 seconds

Est-il possible que node.js peut générer un nouveau thread pour chaque demande, de sorte que la deuxième demande de ne pas attendre la fin de la première demande de compléter, ou puis-je appeler le sommeil sur le thread spécifique seulement?

165voto

David Weldon Points 14329

Si vous faites référence à l'mnp module de sommeil, il note dans le fichier readme qu' sleep va bloquer l'exécution. Donc, vous avez raison, ce n'est pas ce que vous voulez. Au lieu de cela vous voulez utiliser setTimeout qui est non-bloquante. Voici un exemple:

setTimeout(function() {
  console.log('hello world!');
}, 5000);

0voto

Manish Bansal Points 26

mais ce n'est pas ce qui est prévu, comment utiliser setTimeout l'intérieur d'une boucle.

Je veux imprimer la valeur de i 10 fois

for(var i=0;i<10;i++){
  setTimeout(sendmsg(i), 1000);
} 

function sendmsg(client, i) { console.log('message : ' + i); }

ce code permet d'imprimer tous, de 0 à 9 en une seule fois après 1 seconde de retard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X