Frage

Ich schreibe einen Spielserver in node.js, und einige Vorgänge beinhalten eine starke Berechnung auf einem Teil des Servers. Ich möchte nicht aufhören, Verbindungen zu akzeptieren, während ich diese Berechnungen ausführe - wie kann ich sie im Hintergrund ausführen, wenn Node.js keine Threads unterstützt?

War es hilfreich?

Lösung

Ich kann mich nicht persönlich für beide bürgen, aber wenn Sie die Arbeit in der Arbeit erledigen möchten, gab es einige unabhängige Implementierungen der Webworkers-API für Knoten, wie auf der Seite der Knotenmodule aufgeführt :

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

Auf den ersten Blick sieht der zweite ausgereifter aus, und diese würden es Ihnen beide ermöglichen, im Wesentlichen programmierte, aber es ist das Schauspielermodell, sodass alles mit dem Passieren von Nachrichten fertig ist und Sie keine gemeinsam genutzten Datenstrukturen oder irgendetwas haben können.

Auch für das, was es wert ist, beabsichtigt das Team von Node.js, diese API genau zu implementieren, sodass diese Tools, auch wenn sie nicht perfekt sind, eine anständige Stoppgap sein.

Andere Tipps

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);});

Stellen Sie sicher, dass der Spawn -Prozess einmal pro Anwendung erfolgt, dann in das Zeug einfügen und nach Ereignissen pro Verbindung ansehen. Sie sollten auch überprüfen, ob der ListorWhatev noch vor dem Umgang mit ihm läuft. Da wir alle diese ungewöhnlichen Fehler im Knoten lieben, die die App abstürzen, tun wir nicht;) Wenn der Spawn (PID) durch ein Kill oder etwas Schlimmes auf Ihrer Maschine passiert und Sie den Spawn in Ihrem Code nicht anmutig beendet haben, ist Ihr Stream Event -Handler stürzt Ihre App ab.

und einige Vorgänge beinhalten eine starke Berechnung auf einem Teil des Servers

Wie haben Sie Code geschrieben, der in erster Linie stark berechnet ist? Das ist sehr schwer in Node.js.

Wie kann ich sie im Hintergrund ausführen, wenn Node.js keine Threads unterstützt?

Sie können ein paar Arbeiterinstanzen (Knoten) hervorbringen und mit der Akzeptanz von Verbindungen (Knoteninstanz) mitspielsweise mit dem Redis -Blockierungs -Pop kommunizieren. Node.js Redis Library blockiert keine.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top