pomelo的session
更多信息请参考源码sessionRemote.js和 sessionService.js
session(会话)是保存在服务端的会话。
session的使用
session.bind(uid); // 吧该session和uid绑定,建立uid和session的key-value关系 session.set('rid', rid);// 设置session属性 session.push('rid', function(err) { // 把该属性更新到sessionService if(err) { console.error('set rid for session service failed! error is : %j', err.stack); } }); session.on('closed', onUserLeave.bind(null, self.app)); // 注册"closed"(会话关闭 //(一般为与和护短断开连接,退出客户端)) 事件的处理函数,,该事件会自动移除sessionService中的这个session
sessionService 负责 维护session,如获取,移除等
var sessionService = self.app.get('sessionService'); // 获得sessionService模块 //duplicate log in if( !! sessionService.getByUid(uid)) { // 根据uid 获取session next(null, { code: 500, error: true }); return; } //主动移除session SessionService.prototype.kickBySessionId = function(sid, cb) { var session = this.get(sid); if(session) { // notify client session.closed('kick'); process.nextTick(function() { utils.invokeCallback(cb); }); } else { process.nextTick(function() { utils.invokeCallback(cb); }); } }; //主动移除session SessionService.prototype.kick = function(uid, reason, cb) { // compatible for old kick(uid, cb); if(typeof reason === 'function') { cb = reason; reason = 'kick'; } var sessions = this.getByUid(uid); if(sessions) { // notify client for(var i=0, l=sessions.length; i < l; i++) { sessions[i].closed(reason); } process.nextTick(function() { utils.invokeCallback(cb); }); } else { process.nextTick(function() { utils.invokeCallback(cb); }); } };