更多信息请参考源码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);
});
}
};