更多信息请参考源码 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 的使用

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);
                    });
                  }
                };