Skip to content

andris9/gearnode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NB !!ABANDONWARE!!

I'm not maintaining this repo anymore. Sorry.

Gearnode

Gearnode is a Node.JS client/worker module for Gearman.

NB! check out another Gearman library of mine node-gearman which is somewhat more simple than this one.

Installation

npm install gearnode

Tests

Tests are run with nodeunit

./run_tests.sh

Tests expect a Gearman daemon running on port 7003

Usage

Worker

var Gearnode = require("gearnode");

worker = new Gearnode();
worker.addServer(); // use localhost

worker.addFunction("upper", "utf-8", function(payload, job){
    var response =  payload.toUpperCase();
    job.complete(response);
});

Client

var Gearnode = require("gearnode");

client = new Gearnode();
client.addServer();

var job = client.submitJob("upper", "hello world!", {encoding:'utf-8'});

job.on("complete", function(handle, response){
    console.log(response); // HELLO WORLD!
    client.end();
});

API

Require Gearman library

var Gearnode = require("gearnode");

Create a new Gearnode worker/client

var gearnode = new Gearnode();

Add a server

gearnode.addServer([host][, port])

Where

  • host is the hostname of the Gearman server (defaults to localhost);
  • port is the Gearman port (default is 4730)

Example

gearnode.addServer(); // use default values
gearnode.addServer("gearman.lan", 7003);

Register for exceptions

Exceptions are not sent to the client by default. To turn these on use the following command.

gearnode.getExceptions([callback])

Where

  • callback is an optional callback function with params error if an error occured and success which is true if the command succeeded

Example

client = new Gearnode();
client.addServer(); // use default values
client.getExceptions();

job = client.submitJob("reverse", "Hello world!");

job.on("error", function(exception){
    console.log(exception);
});

Assign an ID for the Worker

Worker ID's identify unique workers for monitoring Gearman.

gearnode.setWorkerId(id)

Where

  • id is a string that will act as the name for the worker

Example

worker = new Gearnode();
worker.addServer(); // use default values
worker.setWorkerId("my_worker");

Submit a job

gearnode.submitJob(func, payload[, options])

Where

  • func is the function name
  • payload is either a String or a Buffer value
  • options is an optional options object (see below)

Possible option values

  • encoding - indicates the encoding for the job response (default is Buffer). Can be "utf-8", "ascii", "base64", "number" or "buffer"
  • background - if set to true, detach the job from the client (complete and error events will not be sent to the client)
  • priority - indicates the priority of the job. Possible values "low", "normal" (default) and "high"

Returns a Client Job object with the following events

  • created - when the function is queued by the server (params: handle value)
  • complete - when the function returns (params: response data in encoding specified by the options value)
  • fail - when the function fails (params: none)
  • error - when an exception is thrown (params: error string)
  • warning - when a warning is sent (params: warning string)
  • status - when the status of a long running function is updated (params: numerator numbber, denominator number)
  • data - when partial data is available (params: response data in encoding specified by the options value)

Example

client = new Gearnode();
client.addServer(); // use default values
worker.getExceptions();

job = client.submitJob("reverse", "Hello world!", {encoding:"utf-8"});

job.on("complete", function(response){
    console.log(response); // !dlrow olleH
});

job.on("fail", function(){
    console.log("Job failed :S");
});

Create a worker function

gearnode.addFunction(func_name[, encoding], worker_func)

Where

  • func_name is the name of the function to be created
  • endocing is the input encoding (default is buffer)
  • worker_func is the actual worker function

Worker function

worker_func = function(payload, job)

Where

  • payload is the data sent by the client and in the encoding specified with addFunction
  • job is a Gearman Job object that can be used to send data back

Worker Job object

Worker Job object has the following methods

  • complete(response) - send the result of the function back to the client
  • error(error) - throw an exception (and end the job with failed status)
  • fail() - end the function without response data when the function failed
  • warning(warning) - send a warning message to the client
  • data(response) - send a partial response data to the client
  • setStatus(numerator, denominator) - send a progress event to the client

Example

var Gearnode = require("gearnode");

var worker = new Gearnode();
worker.addServer();

worker.addFunction("sqr", "number", function(payload, job){
    if(payload < 0){
        job.warning("Used number is smaller than zero!");
    }
    job.complete(payload * payload);
});

Detect connection errors

When the connection is lost a "disconnect" event is emitted to the client/worker

worker.addServer("gearman.lan");
worker.on("disconnect", function(server){
    console.log("Connection lost from "+server_name);
});

License

MIT

About

Gearman worker and client for Node.js

Resources

License

Stars

Watchers

Forks

Packages

No packages published