nv-server-session-pool

nv-server-session-pool ======================= - nv-server-session-pool - multi-session/per-user mgmt , used in project:nv-server-socket - suitable for small-scale online-application, such as 3000 sessions at the same time

Usage no npm install needed!

<script type="module">
  import nvServerSessionPool from 'https://cdn.skypack.dev/nv-server-session-pool';
</script>

README

nv-server-session-pool

  • nv-server-session-pool
  • multi-session/per-user mgmt , used in project:nv-server-socket
  • suitable for small-scale online-application, such as 3000 sessions at the same time

install

  • npm install nv-server-session-pool

usage

example

    const {
        Pool,
        ERROR_DICT,
        LOGOUT_ACTION,
        DISCONN_ACTION,
        Sresp,
        Duresp,
    } = require("nv-server-session-pool");



    async function login(D,hash=(r)=>r.userid) {
        //D       customer input
        //hash    customer-defined-function-to-calc-userid
        return({
            userid:hash(D),
            max_sess_count:3,           //max-sess-permited-for-user
            utoken_tmout:3600*60*24,    //utoken-timeout
            sess_tmout:30000,          //session-timeout
        })
    }

    var pool = new Pool(login);
    var u1 = await pool.get_utoken({userid:1})
    var u2 = await pool.get_utoken({userid:2})
    var u3 = await pool.get_utoken({userid:3})

    /*
    > pool.user_count_
    3
    >
    */




    /*
    > u1
    Uresp {
      utoken: 'sf6QbJ0TkjBeE3zn6Thq2TDW1JWLrYgs838-DcCF1j9hK3nhpj_ZkNEmT4H_IdCC',
      utmout: Promise { <pending> }
    }
    > u2
    Uresp {
      utoken: 'eTk6RZ-RODU5PIEpOOkzpUKPHRxcZBBz2aWFo38eZ8ytwRkSlmnezF7mBD_bIiph',
      utmout: Promise { <pending> }
    }
    > u3
    Uresp {
      utoken: 'fGGNjwc6Ueq9Pi6NcZLqkZYXHiSnhiqiBXvl4ydfUU8JMaeR09iyEUdYddXy9KM_',
      utmout: Promise { <pending> }
    }
    >
    */

    async function utoken_tmout_handler(pool,u) {
        try {
            let r = await u.utmout;
        } catch(err) {
            let {utoken,sesses} = pool.del_user(u.utoken);
            sesses.forEach(sess=>sess.close())
        }
    }
    utoken_tmout_handler(pool,u1);
    utoken_tmout_handler(pool,u2);
    utoken_tmout_handler(pool,u3);
    /*
    utmout   tmout-promise
    > u1.utmout.lefted_
    5157803
    > u1.utmout.lefted_
    5154477
    > u1.utmout
    Promise { <pending> }
    >

    */


    class FakeSession {
        close() {console.log("closed")}
    }

    /*
    > pool.get_max_sess_count(u1.utoken)
    3
    >
    */

    var s0 = new FakeSession()
    var s1 = new FakeSession()
    var s2 = new FakeSession()

    var u1s0 = pool.add_sess(s0,u1.utoken);
    var u1s1 = pool.add_sess(s1,u1.utoken);
    var u1s2 = pool.add_sess(s2,u1.utoken);

    /*
    > u1s0
    Sresp {
      sess: FakeSession {},
      stmout: Promise { <pending> },
      kicked: null,
      err: null
    }
    > u1s0.stmout
    Promise { <pending> }
    > u1s0.stmout.lefted_
    13281
    >
    > u1s0
    Sresp {
      sess: FakeSession {},
      stmout: Promise {
        <rejected> TmoutError: 30000
            at Timeout.<anonymous> (/opt/JS/NV5_/nv-server-/pkgs/nv-server-session-pool/node_modules/nv-facutil-promise/index.js:283:17)
            at listOnTimeout (node:internal/timers:556:17)
            at processTimers (node:internal/timers:499:7)
      },
      kicked: null,
      err: null
    }
    >

    */


    var s0 = new FakeSession()
    var s1 = new FakeSession()


    var u2s0 = pool.add_sess(s0,u2.utoken);
    var u2s1 = pool.add_sess(s1,u2.utoken);

    /*
    > pool.total_sess_count_
    5
    >
    */

    async function sess_tmout_handler(pool,s) {
        try {
            let r = await s.stmout;
        } catch(err) {
            let sess = pool.del_sess(s.sess);
            sess.close();
        }
    }

    sess_tmout_handler(pool,u1s0)
    sess_tmout_handler(pool,u1s1)
    sess_tmout_handler(pool,u1s2)
    sess_tmout_handler(pool,u2s0)
    sess_tmout_handler(pool,u2s1)


    /*
    closed
    closed
    closed
    closed
    closed
    Promise {
      <rejected> TmoutError: 30000
          at Timeout.<anonymous> (/opt/JS/NV5_/nv-server-/pkgs/nv-server-session-pool/node_modules/nv-facutil-promise/index.js:283:17)
          at listOnTimeout (node:internal/timers:556:17)
          at processTimers (node:internal/timers:499:7)
    }
    >

    > pool.total_sess_count_
    0
    >


    */

METHODS

API

LICENSE

  • ISC