@luminati-io/locker

    0.1.6-lum.2 • Public • Published

    This is extended version of locker.js; original README is below

    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.

    Features

    • 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.

    Clients

    node.js

    Client for node.js is completely async.

    Example:

    var Locker = require("locker"),
        locker = new Locker(4545, "127.0.0.1");
    
    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
            callback(error);
            return;
        }
    
        // do whatever you want with your shared resource
        
        callback(undefined, {well: "done"});
    });

    PHP

    Client for php.

    Example:

    require_once('Locker.php');
    
    $Locker = new \Locker\Locker("127.0.0.1", 4545);
    
    // Lock creation
    $LockOne = $Locker->createLock('example');
    
    // getting lock
    $LockOne->acquire(200, 10000);
    // doing very important stuff
    echo 'Waiting for 5 seconds..'."\n";
    sleep(5);
    // releasing lock
    $LockOne->release();

    Python

    Client for python

    Example:

    from pylocker import Locker
    
    # create locker server connection
    locker = Locker("127.0.0.1", 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
    lock.release()

    Running

    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();
    
        locker.listen(4545);
    })();

    Run it after all:

    node server.js
    

    Capacity

    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.

    Testing

    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.

    Install

    npm i @luminati-io/locker

    DownloadsWeekly Downloads

    14

    Version

    0.1.6-lum.2

    License

    ISC

    Unpacked Size

    23.4 kB

    Total Files

    14

    Last publish

    Collaborators

    • luminati.io
    • fudali
    • demarchisd
    • joshwillik
    • dmitriie