Fork me on GitHub

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(...)", 如果您启用会话快照,会话也来自快照.

posted @ 2013-03-13 23:21  逗豆豆  阅读(818)  评论(2)    收藏  举报