使用Session对象向客户端发送数据
我们已经提到过,AppSession表示一个逻辑socket连接,基于连接的各种操作应该被定义在这个类中。AppSession也封装了一些发送数据的方法。你可以是使用AppSession的Send(...)方法来向客户端发送数据。
session.Send(data, 0, data.Length); //或者 session.Send("Welcome to use SuperSocket!");
按SessionID获取Session
正如在前一部分提到的,如果你已经得到了连接的Session实例,你就可以使用Send(...)方法来向客户端发送数据。但在一些情况下,你无法直接取到你所需要的那个Session实例。SuperSocket提供一个API允许你从AppServer的Session容器中按Session ID获取一个Session。
var session = appServer.GetSessionByID(sessionID); if(session != null) session.Send(data, 0, data.Length);
什么是SessionID?
SessionID是AppSession类中用来识别Session的一个属性。在SupserSocket TCP服务器里,SessionID是在Session一经创建就立即分配的一个GUID字符串。如果你在SuperSocket UDP服务器中没有使用UdpRequestInfo,那么SessionID将由远程断电的IP和端口组成;如果在SuperSocket UDP服务器中使用了UdpRequestInfo,SessionID的值将从客户端传回来。
获取所有已连接的Session
你也可以从AppServer实例中获取所有已连接的Session,然后向所有客户端推送数据:
foreach(var session in appServer.GetAllSessions()) { session.Send(data, 0, data.Length); }
如果你启用了Session快照,通过AppServer.GetAllSessions()方法获取到的Session并不是实时更新的,而是上一次快照生成时AppServer中的所有已连接的Session。
按条件获取Session
如果在你的AppSession中有一个自定义的“CompanyId”属性,你希望获取所有已连接Session中CompanyId等于某一确定值的所有Session,那么AppServer的GetSession(...)方法会十分有用:
var sessions = appServer.GetSessions(s => s.CompanyId == companyId); foreach(var s in sessions) { s.Send(data, 0, data.Length); }
与GetAllSessions(...)方法一样,如果启用了Session快照,该方法获取到的Session也来自于快照。
没有评论:
发表评论