第一范文网 - 专业文章范例文档资料分享平台

SuperSocket学习进展

来源:用户分享 时间:2025/5/19 15:24:00 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

当然你也可以在配置中添加多个命令程序集。

命令加载器 (Command Loader)

在某些情况下,你可能希望通过直接的方式来加载命令,而不是通过自动的反射。你可以实现你自己的命令加载器 (Command Loader): public interface ICommandLoader

然后配置你的服务器来使用你新建的命令加载器 (Command Loader):

serverType=\ ip=\

commandLoader=\

type=\

如果是这样, 获取会话的连接和断开事件

关键字: 连接事件, 断开事件, OnSessionStarted,OnSessionClosed, NewSessionConnected, SessionClosed

AppSession 的虚方法 OnSessionStarted() 和 OnSessionClosed(CloseReason reason)

你可以覆盖基类的虚方法 OnSessionStarted() 和 OnSessionClosed(CloseReason reason) 用于在会话连接和断开时执行一些逻辑操作:

public class TelnetSession : AppSession {

protected override void OnSessionStarted() {

this.Send(\ //add your business operations }

protected override void OnSessionClosed(CloseReason reason) {

//add your business operations } }

AppServer 的两个事件: NewSessionConnected 和 SessionClosed

订阅事件:

appServer.NewSessionConnected += new

SessionHandler(appServer_NewSessionConnected);

appServer.SessionClosed += new SessionHandler(appServer_SessionClosed);

定义事件处理方法:

static void appServer_SessionClosed(AppSession session, CloseReason reason) {

Console.WriteLine(\}

static void appServer_NewSessionConnected(AppSession session) {

session.Send(\}

主动从服务器端推送数据到客户端

关键字: 主动推送, 推送数据, 客户端推送, 获取Session, 发送数据, 回话快照

通过Session对象发送数据到客户端

前面已经说过,AppSession 代表了一个逻辑的 socket 连接,基于连接的操作都应该定义在此类之中。 这个AppSession 类也封装了通过 socket 发送数据的方法。 你可以使用 AppSession 的方法 \来发送数据到客户端:

session.Send(data, 0, data.Length); or

session.Send(\

通过 SessionID 获取 Session

前面提到过,如果你获取了连接的 Session 实例,你就可以通过 \方法向客户端发送数据。但是在某些情况下,你无法直接获取 Session 实例。

SuperSocket 提供了一个 API 让你从 AppServer 的 Session 容器中通过 SessionID 获取 Session

var session = appServer.GetSessionByID(sessionID);

if(session != null)

session.Send(data, 0, data.Length); SessionID是什么?

SessionID 是 AppSession 类的一个属性,用于唯一标识一个 Session 实例。 在一个 SuperSocket TCP 服务器中,当 Session 一创建, SessionID 就会被赋值为一个 GUID 字符串。 如果你不在 SuperSocket UDP 服务器中使用 UdpRequestInfo,SessionID 就会有客户端的IP和端口组成。 如果你使用UdpRequestInfo,SessionID将会从客户端传过来。

获取所有连接上的 Session

你也可以从 AppServer 实例获取所有连接上的 session 然后推送数据到所有客户端: foreach(var session in appServer.GetAllSessions()) {

session.Send(data, 0, data.Length); }

如果你启用了 Session 快照, 这些从 AppServer.GetAllSessions() 获取的 sessions 将不是实时更新的。 他们是在上次获取快照时所有连接到服务器的 Session。 快照相关配置,请参考配置文档。

根据条件获取 Session

如果你有一个自定义的属性 \在你的 AppSession 类之中,如果你想要获取这个属性等于某值的 的所有 Session, 你可以使用 AppServer 的方法 GetSessions(...):

var sessions = appServer.GetSessions(s => s.CompanyId == companyId); foreach(var s in sessions) {

s.Send(data, 0, data.Length); }

和方法 \一样, 如果你启用了 Session 快照,这些返回的 session 也一样也来自于快照之中。

搜索更多关于: SuperSocket学习进展 的文档
SuperSocket学习进展.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0a9r10687u9y6yn8bcxl_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top