Hello,

I am writing a few workers that will need to poll a redis instance looking 
for some data.  At small scale this is not a major deal, but I need to 
ensure that I write this worker to handle maximum throughput.

The basic idea is to check redis to see if there is a key that matches, if 
so, send to a process function.

The basic code I have is below ( stripped down ).  As you can see from the 
code, for this one “Node Process” I am starting 10 worker loops.  In 
running this test, it seems like it is processing the messages in batches 
of 10, so like all 10 complete, then 10 more start.  Perhaps  this is b/c 
they are all going so fast it just naturally happens that way, but what I 
would like to see is if the first one is completed, it fires another worker 
loop instead of waiting fro all 10 to complete.

Any thoughts on design, best practices, and/or best way to handle what I am 
looking to do?


/*

    when the process starts, kick off 10 calls so we have a concurrecy of 
10...

    Basically thought is this is like 10 users hitting an API all at once, 
we are running

    one node instance but handling x number of requests at any given second.

*/

for(var w=0; w<10; w++ ){

    start_worker();

}


// Start a worker up...

start_worker = function(){


    var local = {};


    async.series([

        function(callback){

          // Do something

          callback(null);

        }

        ,function(callback){

            // Look up some keys, which returns an array...

            local.results = ['key1','key2','key3'];

            callback(null);

        }


        ,function(callback){

            async.each(local.results, function( delay_time, callback) {

              

                processMessages(delay_time, function(err){

                    callback(err);

                });


            }, function(err){

                callback(err);

            });

        }

    ],

    // optional callback

    function(err, results){

        start_worker();

    });

}


// handle the processing of the actual message when one is located....

processMessages = function(delay_time, callback){

    var local = {};

    local.doProcess = true;

    async.doWhilst(

        function (callback) {

            redis_client.rpoplpush("delayed:" + delay_time, 
"delayed:processing", function (err, message_data){

                

                if(message_data){ 

                    var data = JSON.parse(message_data);

                    // this is where we could move the messages to 
processing, then clean the message off the delayed:processing queue.


                    console.log(message_data);


                    // assume everything was done...now delete the message 
from processing....

                    redis_client.lrem("delayed:processing", 0, 
message_data, function(err, result){

                       console.log('deleted: ' + message_data);

                       callback(null);

                    });

                    

                }else{

                    local.doProcess = false;

                    callback(null);

                }

            });

        },

        function () { return local.doProcess; },

        function (err) {

            if(err){

                console.log(err)

            }

            callback(err);

        }

    );

}


Thanks in advance!

-- 
Job board: http://jobs.nodejs.org/
New group rules: 
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
--- 
You received this message because you are subscribed to the Google Groups 
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nodejs+unsubscr...@googlegroups.com.
To post to this group, send email to nodejs@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nodejs/365555c1-8671-44f4-a94d-d2c99059e63d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to