- full implementation of worker and client
- lean abstraction over raw gearman protocol
- lots of unit tests
- fast
- small
- fully interoperable with gearman clients and workers written in other languages
- lacks elegant high level abstractions for doing work. A bit more boilerplate to write
- only supports 1 server connection per client/worker
npm install gearman
npm run build
npm test
Gearman = require('gearman').Gearman
client = new Gearman("localhost", 4730 , {timeout: 3000}) # timeout in milliseconds.
# handle timeout
client.on 'timeout', () ->
console.log 'Timeout occurred'
client.close()
# handle finished jobs
client.on 'WORK_COMPLETE', (job) ->
console.log 'job completed, result:', job.payload.toString()
client.close()
# connect to the gearman server
client.connect ->
# submit a job to uppercase a string with normal priority in the foreground
client.submitJob 'upper', 'Hello, World!'
Gearman = require('gearman').Gearman
worker = new Gearman('127.0.0.1', 4730)
# handle jobs assigned by the server
worker.on 'JOB_ASSIGN', (job) ->
console.log job.func_name + ' job assigned to this worker'
result = job.payload.toString().toUpperCase()
# notify the server the job is done
worker.sendWorkComplete job.handle, result
# go back to sleep, telling the server we're ready for more work
worker.preSleep()
# grab a job when the server signals one is available
worker.on 'NOOP', ->
worker.grabJob()
# connect to the gearman server
worker.connect ->
# register the functions this worker is capable of
worker.addFunction 'upper'
# tell the server the worker is going to sleep, waiting for work
worker.preSleep()