Skip to content

Commit

Permalink
updated README
Browse files Browse the repository at this point in the history
  • Loading branch information
pascalopitz committed Mar 10, 2011
1 parent 02c0e84 commit a193470
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 50 deletions.
50 changes: 0 additions & 50 deletions README

This file was deleted.

115 changes: 115 additions & 0 deletions README.md
@@ -0,0 +1,115 @@
A Beanstalk client utilising node.js
Tested for beanstalkd 1.4.6

## INSTALL

npm install nodestalker


## USAGE

Simple usage example:

var bs = require('../lib/beanstalk_client');
var client = bs.Client();

client.use('default').onSuccess(function(data) {
console.log(data);

client.put('my job').onSuccess(function(data) {
console.log(data);
client.disconnect();
});
});




## How do I reserve multiple items?

Each client basically represents one open socket to beanstalkd.
Each command call just pumps one command into that socket.
The server should maintain the state of the socket.
However, reserve (or reserve with timeout) will only pull one job.
You should then be able to reserve again on the same socket with the state of watch and ignore still preserved by the server.

Probably the most common usage scenario:

var bs = require('../lib/beanstalk_client.js');
var client = bs.Client();
var tube = 'test_tube';

client.watch(tube).onSuccess(function(data) {
function resJob() {
client.reserve().onSuccess(function(job) {
console.log('reserved', job);

client.deleteJob(job.id).onSuccess(function(del_msg) {
console.log('deleted', job);
console.log('message', del_msg);
resJob();
});
});
}

resJob();
});

If you want to do this fully in a fully asynchronous way, because there's a blocking process happening otherwise, you'll have to work with multiple sockets.
This means that you'll have to repeat watch and ignore commands for each socket.

var bs = require('./lib/beanstalk_client.js');
var tube = 'test_tube';

function processJob(job, callback) {
// doing something really expensive
console.log('processing...');
setTimeout(function() {
callback();
}, 1000);
}

function resJob() {
var client = bs.Client();

client.watch(tube).onSuccess(function(data) {
client.reserve().onSuccess(function(job) {
console.log('received job:', job);
resJob();

processJob(job,
function() {
client.deleteJob(job.id).onSuccess(function(del_msg) {
console.log('deleted', job);
console.log(del_msg);
client.disconnect();
});
console.log('processed', job);
});
});
});
}

resJob();


## DOCUMENTATION

Annotated source in the docs folder

## TESTING

Also there are some tests now.
Please make sure beanstalkd is running on the default settings.

To run all tests:

find tests/ | grep .js | xargs -n1 node


## CREDIT

Depends on the yaml package by visionmedia.

https://github.com/visionmedia/js-yaml

0 comments on commit a193470

Please sign in to comment.