Worker job usando Nodej.s

En alguno proyectos es necesario tener una tarea ejecutando cada cierto tiempo, la cual estaria haciendo desde un heardbeat hasta una consulta en una base de datos para consumir un web service en fin muchas cosas. En este tutorial estaré mostrando una alternativa al poderoso cron de Linux pero esta vez con nodejs.

El ejemplo consta de 2 archivos un archivo server.js que es nuestro servidor js y otro archivo llamado task.js que es nuestro cron.

Page1__Lucidchart

Una vez inciado el cron el envio de mensajes se realiza de la siguiente manera

 childProcess.send({values:[]}) 

Page2__Lucidchart

Server.js

var http = require('http');
var process = require('child_process');

var app = http.createServer(function(req,res){
	child.send({'key':'value'})

	res.end('hello');
});

console.log('server running');

// se realiza el fork del nuevo proceso
var child = process.fork('task.js');

// dispara el evento message hacia el fork
child.send({'key':'valor'})
console.log('proceso hijo iniciado');

app.listen(3000);

Task.js

var context = [];

(function(context){
    setInterval(function(){
        var value = context.pop()
        console.log('iteraciones ' + value);
    },1000);
})(context);

process.on('message',function(value){
    console.log('mensaje recibido');

    context.push(value);
});

Esta seria otra opcion para el task.
Task2.js

var context = [];

var process = function(){
    var value = context.pop()
    console.log('iteraciones ' + value);
}

process.on('message',function(value){
	console.log('mensaje recibido');
	context.push(value);
});

Mi recomendacion es que para algun proceso ligero/pesado y no quieras tener que incluir algun nuevo modulo de node.js o simplemente quieres manejarlo tu mismo lo intententes de esta manera.

Referencias

Child Process Nodejs

Source 

Sending objects

Fork process

Nota: Si requiren algo mas complejo con respecto a este tema recomiendo usar este modulo modulo.

Share on Google+Share on LinkedInShare on RedditShare on TumblrTweet about this on TwitterShare on Facebook