Lorsque je reçois un événement "on" côté serveur, je souhaite démarrer une tâche en parallèle afin de ne pas bloquer le thread de boucle d'événement en cours. Est-il possible de le faire? Comment?Comment exécuter une tâche asynchrone avec socket.io et node.js?
Je ne veux pas bloquer la boucle côté serveur et je veux être en mesure de renvoyer un message au client une fois la tâche terminée, quelque chose comme:
client.on('execute-parallel-task', function(msg) {
setTimeout(function() {
// do something that takes a while
client.emit('finished-that-task');
},0);
// this block should return asap, not waiting for the previous call
});
Je ne suis pas sûr si setTimeout fera le travail.
Je peux utiliser async.parallel sans problèmes mais le serveur répondrait-il à d'autres demandes pendant que mon (faire quelque chose qui prend un peu de temps) est en cours d'exécution? va-t-il exécuter les deux codes en même temps? –
oui, c'est comme ça que fonctionne async ... C'est fondamentalement un thread (vous n'avez pas de threads dans node.js) ... chaque fois qu'une partie attend que quelque chose se passe, un autre code s'exécute et quand quelque chose se passe, un évènement est appelé le gestionnaire de droite le gère .. http://stevehanov.ca/blog/index.php?id=127 –
Si vous avez besoin d'un modèle de filetage, vous pourriez avoir choisi la technologie usée pour votre backend ... avoir plusieurs processus de communication entre eux n'est pas aussi efficace que les threads ... en fait vous créeriez des threads en utilisant des processus == beaucoup plus frais généraux avec beaucoup plus de complexité pour aucun paiement. –