Skip to content
ScutGame edited this page Jul 6, 2015 · 6 revisions

此章节介绍服务端的Sesssion会话机制

Session概述

Session:称为“会话”,是指客户端与服务器交互通信时临时分配的身份信息凭证,它是有时效性的,在一定时间内没有访问后会过期删除,过期后如果客户端再访问时会重新分配新的Session。

在Scut服务器中提供GameSession类作为Session对象,客户端使用http/socket或websocket访问服务器时都会分配一个临时的GameSession对象,它的有效期是2个小时,如果间隔2个小时没有再访问时它会过期被删除; 客户端第一次访问时服务器会提供一个sessionId来标识一个GameSession对象,并返回给客户端,再次请求时客户端会将sessionId作为参数传给服务端,服务端会通过sessionId找到对应的GameSession对象,就不会再产生一个新的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);

如何获得指定玩家的Session呢?

可以通过玩家的UserId获得,代码如下:

int userId = 1380001;
GameSession session = GameSession.Get(userId);
Clone this wiki locally