SuperSocket 1.5 Documentation译文 9 ----- 从服务器主动推送数据到客户端
通过会话对象发送数据到客户端
说了这么多, AppSession代表逻辑上的socket连接,基于连接的操作应在该类中定义. AppSession也封装了socket发送数据的方法. 您可以使用AppSession的方法“Send(...)”将数据发送到客户端:
session.Send(data, 0, data.Length); 或者 session.Send("Welcome to use SuperSocket!");
获取会话的SessionID
正如在以前的部分,如果你有连接的会话实例, 那么你可以通过方法“Send(..)”发送数据到客户端. 但是在某些情况下, 你不能直接获取你要的会话实例.
SuperSocket提供了一个API,让你根据sessionID从AppServer的会话容器得到一个会话.
var session = appServer.GetSessionByID(sessionID); if(session != null) session.Send(data, 0, data.Length);
什么是 SessionID?
SessionID是AppSession类的一个属性,用于标识会话. 在SuperSocket TCP Server, SessionID是当会话创建的时候被指定的GUID字符串. 如果你不在SuperSocket UDP Server中使用UdpRequestInfo , SessionID将包含远程端点的IP地址和端口.如果你在SuperSocket UDP Server中使用UdpRequestInfo, SessionID的值是通过客户端传递而来.
所有连接的会话
您还可以根据AppServer实例得到所有连接的会话,然后将数据推送到所有客户端:
foreach(var session in appServer.GetAllSessions()) { session.Send(data, 0, data.Length); }
如果您启用会话快照, 那么根据AppServer.GetAllSessions()获取的会话不会实时更新. 他们是最后一次快照采集时AppServer所有的连接会话.
通过条件获取会话
如果你有一个自定义属性"CompanyId"在你的AppSession中, 根据companyId来获取你想要的所有已连接的会话, 用法如下:
var sessions = appServer.GetSessions(s => s.CompanyId == companyId); foreach(var s in sessions) { s.Send(data, 0, data.Length); }
类似的方法有 "GetAllSessions(...)", 如果您启用会话快照,会话也来自快照.


浙公网安备 33010602011771号