pomelo的session

梦想游戏人
目录:
Node.js

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