Долгопрочные вычисления в Node.js
-
25-09-2019 - |
Вопрос
Я пишу игровой сервер в Node.js, а некоторые операции включают в себя тяжелые вычисления на части сервера. Я не хочу перестать принимать соединения, пока бегу эти вычисления - как я могу запустить их на заднем плане, когда Node.js не поддерживает темы?
Решение
Я не могу поручиться ни за любой из них, но если вы хе, согнув на работе в процессе работы, было несколько независимых реализаций API WebWorkers для узла, как указано на странице модулей узлов. :
- http://github.com/cramForce/node-worker.
- http://github.com/pgriess/node-webworker.
На первый взгляд, вторая выглядит более зрело, и они оба позволяют вам по существу делать резьбовое программирование, но это в основном Actor-Model, поэтому все это сделано с сообщением, и вы не можете иметь общие структуры данных или ничего.
Кроме того, для чего это стоит, команда Node.js намерена точно реализовать эту API, в конце концов, так что эти инструменты, даже если они не идеальны, может быть достойным слоем.
Другие советы
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);});
Убедитесь, что процесс поясов происходит один раз в приложении, затем подавать в него вещи и просмотреть его для событий на соединение. Вы также должны убедиться, что Listorwhatev все еще работает перед обработкой его. Как мы все любим этих неосторожных ошибок в узле, разбиваем приложение, не мы;) Когда появляется появление (PID), хотя на вашей машине есть убийство или что-то плохое, и вы не выходили из кода вашего кода, ваш Обработчик событий Stream упадет в ваше приложение.
и некоторые операции включают в себя тяжелые вычисления на части сервера
Как вы написали код, который является вычислением тяжелых в первую очередь. Это очень трудно сделать в Node.js.
Как я могу запустить их на заднем плане, когда Node.js не поддерживает потоки
Вы можете появиться несколько экземпляров и связей пары работника (узла) с принятием соединений (экземпляра узла), используя, например, для блокировки Redis POP. Node.js Библиотека Redis не блокирует.