Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
150 lines (105 sloc) 2.98 KB

locker - lock server written in node.js

This is lock server for system that need to share and lock common resources across servers with sub-second precision.


  • Lock timeouts with millisecond precision:
    • Timeout to wait for getting lock.
    • Timeout to keep lock before releae.
  • No polling: one request to acquire, one request to release.
  • Auto-releasing locks on disconnect.
  • Pure node.js. Just awesome.



Client for node.js is completely async.


var Locker = require("locker"),
    locker = new Locker(4545, "");

locker.on("reset", function() {
    console.log("Reset happened (is server running?)");

locker.on("error", function(error) {
    console.log("Catched error:", error);

//            name    wait  max   callback
locker.locked("five", 2000, 3000, function(error, callback) {
    if (error) {
        // lock failed

    // do whatever you want with your shared resource

    callback(undefined, {well: "done"});


Client for php.



$Locker = new \Locker\Locker("", 4545);

// Lock creation
$LockOne = $Locker->createLock('example');

// getting lock
$LockOne->acquire(200, 10000);
// doing very important stuff
echo 'Waiting for 5 seconds..'."\n";
// releasing lock


Client for python


from pylocker import Locker

# create locker server connection
locker = Locker("", 4545)

# create lock object with some nice name
lock = locker.create_lock("fuu")
# acquire lock, wait for it for 500ms if it's taken
lock.acquire(500, 200)
# do whatever you need for up to 200ms
# and release lock


First create a dir for locker:

mkdir locker
cd locker
mkdir node_modules
npm install locker-server

Then create main server file (look at example/server.js) and save it as server.js:

(function() {
    var Locker = require("locker-server"),
        locker = new Locker();


Run it after all:

node server.js


More performance tests to be done, but for now on my MacBook Air (Intel i5):

Clients count: 5
Different locks to request: 10000
Total locks to request: 50000
Lock work time: 1ms

Server CPU usage: 100%
Server RSS memory: 70-80M (no growth after 5M requests)
Responses per second: 15000-17000 (measuring every 5 seconds)

If you want more, shard your locks.


We use mocha testing framework for this package.

To run it after installation you should run the next command:

# after calling npm install locker-server
npm test locker-server

If you want to contribute — please test your code and make sure everything still works.

Something went wrong with that request. Please try again.