Question

J'écris un serveur de jeu en Node.js, et certaines opérations impliquent de lourds calculs sur une partie du serveur. Je ne veux pas cesser d'accepter des connexions pendant que je cours ces calculs - comment puis-je faire fonctionner en arrière-plan lorsque Node.js ne supporte pas les threads

Était-ce utile?

La solution

Je ne peux pas se porter garant pour l'un de ceux-ci, personnellement, mais si vous êtes un puriste à faire le travail en cours, il y a eu quelques implémentations indépendantes de l'API WebWorkers pour le nœud, comme indiqué sur la page modules de noeud:

  • http://github.com/cramforce/node-worker
  • http://github.com/pgriess/node-webworker

À première vue, le second semble plus mature, et ceux-ci permettrait à la fois de vous permettre essentiellement à faire de la programmation arborescent, mais il est essentiellement modèle d'acteur, il est donc fait avec un message qui passe, et vous ne pouvez pas avoir structures de données partagées ou quoi que ce soit.

En outre, pour ce que ça vaut la peine, l'équipe Node.js entend mettre en œuvre précisément cette API native, éventuellement, de sorte que ces outils, même si elles ne sont pas parfaits, peut-être un pis-aller décent.

Autres conseils

var spawn = require('child_process').spawn;
listorwhatev = spawn('ls', ['-lh', '/usr']);//or whatever server action you need

//then you can attach events to that list like this
listorwhatev.on('exit', function(code){});

///or in this ls example as it streams info
listorwhatev.stdout.on('data', function(info){sys.puts(info);});

assurer processus d'apparition se produit une fois par application, puis alimenter des choses en elle et regarder pour des événements par connexion. vous devriez également vérifier que le listorwhatev fonctionne toujours avant de le manipuler. Comme nous les erreurs non interceptées dans le noeud s'écrasant l'application ne pas aimer tous;) Lorsque le frai (pid) est sorti si une mise à mort ou quelque chose de mauvais arrive sur votre machine et vous ne quittez pas le spawn dans votre code grâce, votre gestionnaire d'événements de flux se bloque votre application.

  

et certaines opérations impliquent lourd   calcul sur une partie du serveur

Comment avez-vous d'écrire du code qui est lourd de calcul en premier lieu. C'est très difficile à faire dans Node.js.

  

comment puis-je les exécuter en arrière-plan   lorsque Node.js ne supporte pas des fils

vous pouvez reproduire deux ou trois cas de travailleurs (nœud) et de communiquer avec les connexions accepter (instance de noeud) en utilisant par exemple Redis blocage des fenêtres pop. Node.js bibliothèque Redis est aucun blocage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top