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