Pergunta

Estou escrevendo um servidor de jogo no Node.js, e algumas operações envolvem computação pesada em parte do servidor. Não quero parar de aceitar conexões enquanto executo esses cálculos - como posso executá -los em segundo plano quando o Node.js não suporta threads?

Foi útil?

Solução

Não posso garantir que eles, pessoalmente, mas se você está empenhado em fazer o trabalho em processo, houve algumas implementações independentes da API da WebWorkers para nó, conforme listado na página Módulos de Nó :

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

À primeira vista, o segundo parece mais maduro, e eles permitiriam que você essencialmente faça programação encadeada, mas é basicamente modelo de ator, por isso tudo é feito com a passagem de mensagens e você não pode ter estruturas de dados compartilhadas ou qualquer coisa.

Além disso, pelo que vale, a equipe Node.JS pretende implementar com precisão essa apiativa, eventualmente, então essas ferramentas, mesmo que não sejam perfeitas, podem ser um stoptap decente.

Outras dicas

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

Certifique -se de que o processo de desova ocorra uma vez por aplicativo e alimente as coisas nele e assista a eventos por conexão. Você também deve verificar se o listorwhatev ainda está em execução antes de lidar com isso. Como todos nós amamos esses erros não capturados no nó que travam o aplicativo, não é;) quando o Spawn (PID) é saído, embora uma morte ou algo ruim aconteça em sua máquina e você não sai da desova em seu código graciosamente, seu O manipulador de eventos de stream travará seu aplicativo.

e algumas operações envolvem computação pesada em parte do servidor

Como você escreveu o código que é pesado em computação em primeiro lugar. Isso é muito difícil de fazer em Node.js.

Como posso executá -los em segundo plano quando o Node.js não suporta threads

Você pode gerar algumas instâncias de trabalhador (nó) e se comunicar com a aceitação de conexões (instância do nó) usando, por exemplo, o Redis bloqueando o pop. Node.js Redis Library não é bloqueador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top