-
Notifications
You must be signed in to change notification settings - Fork 577
Sesssion
ScutGame edited this page Jul 6, 2015
·
6 revisions
此章节介绍服务端的Sesssion会话机制
Session:称为“会话”,是指客户端与服务器交互通信时临时分配的身份信息凭证,它是有时效性的,在一定时间内没有访问后会过期删除,过期后如果客户端再访问时会重新分配新的Session。
在Scut服务器中提供GameSession类作为Session对象,客户端使用http/socket或websocket访问服务器时都会分配一个临时的GameSession对象,它的有效期是2个小时,如果间隔2个小时没有再访问时它会过期被删除; 客户端第一次访问时服务器会提供一个sessionId来标识一个GameSession对象,并返回给客户端,再次请求时客户端会将sessionId作为参数传给服务端,服务端会通过sessionId找到对应的GameSession对象,就不会再产生一个新的GameSession对象。
在服务端项目中,每个Action接口都可以使用Current属性获得GameSession对象,来区分不同的玩家。
使用GameSession类可以获得,它包括有在线的玩家和不在线的玩家,代码如下:
List<GameSession> sessionList = GameSession.GetAll();
使用Socket长连接的情况比较特殊,它不能时时确定玩家的网络是连接的,因此我们需要通过客户端间隔一定时间(如:10s)发送一个心跳包给服务器来告诉服务器是连接成功的;
在使用GameSession类可以获得在线玩家时,需要提供发心跳包间隔时间参数,如果在这时间范围内客户端有再请求上来,我们认为玩家还是在线的;代码如下:
int delayTime = 10 * 1000; //10s
List<GameSession> sessionList = GameSession.GetOnlineAll(delayTime);
可以通过玩家的UserId获得,代码如下:
int userId = 1380001;
GameSession session = GameSession.Get(userId);