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