当前位置: 首页 > news >正文

北京创意设计协会网站国内三大oa系统

北京创意设计协会网站,国内三大oa系统,有限公司和有限责任公司,广东美景园林建设有限公司网站在 SuperSocket 中自定义 Session SuperSocket 是一个高性能、可扩展的 .NET Socket 服务器框架。它的核心设计之一就是 Session(会话),用于表示与客户端的一次连接。 在默认情况下,SuperSocket 使用 AppSession 作为会话对象。但…

在 SuperSocket 中自定义 Session

SuperSocket 是一个高性能、可扩展的 .NET Socket 服务器框架。它的核心设计之一就是 Session(会话),用于表示与客户端的一次连接。
在默认情况下,SuperSocket 使用 AppSession 作为会话对象。但在实际业务中,我们往往需要在 Session 中存储更多上下文信息,比如:

  • 用户 ID / 登录状态
  • 业务数据缓存
  • 会话级别的统计信息(消息数量、心跳时间等)

这时候,就需要 自定义 Session


一、Session 的基础

默认的 Session 类型是 AppSession

public class AppSession : IAppSession
{public string SessionID { get; }public IConnection Connection { get; }public ValueTask SendAsync(ReadOnlyMemory<byte> data) { ... }public virtual ValueTask OnSessionConnectedAsync() { ... }public virtual ValueTask OnSessionClosedAsync(EventArgs e) { ... }
}

每当有新的客户端连接,SuperSocket 就会创建一个新的 AppSession 实例,代表该连接。


二、为什么要自定义 Session?

举个例子,如果我们在聊天系统中,需要知道 哪个用户对应哪个 Session,那么就需要给 Session 加上用户信息:

public class MySession : AppSession
{// 扩展属性public string UserId { get; set; }// 重写连接事件protected override ValueTask OnSessionConnectedAsync(){Console.WriteLine($"新连接建立: {SessionID}");return base.OnSessionConnectedAsync();}protected override ValueTask OnSessionClosedAsync(EventArgs e){Console.WriteLine($"连接关闭: {SessionID}");return base.OnSessionClosedAsync(e);}
}

三、如何让 SuperSocket 使用自定义 Session?

SuperSocket 并不会自动使用 MySession,它默认用 AppSession
所以我们需要告诉框架:新会话请用我自定义的 MySession 来创建

这就要用到 ISessionFactory

public class MySessionFactory : ISessionFactory
{public Type SessionType => typeof(MySession);public IAppSession Create(){return new MySession();}
}

然后在启动时注册:

services.AddSingleton<ISessionFactory, MySessionFactory>();

在这里插入图片描述

这样,SuperSocket 每次有新连接时,都会调用 MySessionFactory.Create(),从而生成 MySession


四、最佳实践:管理所有在线 Session

有了自定义 Session,我们可以轻松实现全局管理,比如存储所有在线用户:

public class MySession : AppSession
{public static ConcurrentDictionary<string, MySession> Sessions = new();public string UserId { get; set; }protected override ValueTask OnSessionConnectedAsync(){Sessions.TryAdd(SessionID, this);Console.WriteLine($"新连接 {SessionID} 已加入,当前在线数: {Sessions.Count}");return default;}protected override ValueTask OnSessionClosedAsync(EventArgs e){Sessions.TryRemove(SessionID, out _);Console.WriteLine($"连接 {SessionID} 已移除,当前在线数: {Sessions.Count}");return default;}
}

这样你就能在任何地方调用:

foreach (var session in MySession.Sessions.Values)
{await session.SendAsync(Encoding.UTF8.GetBytes("Hello Client!"));
}

实现广播或点对点消息发送。


五、总结

通过自定义 Session,我们就可以:

  1. 给连接存储更多业务数据(用户、状态、上下文)
  2. 在连接建立/关闭时执行逻辑(认证、日志、清理)
  3. 统一管理在线 Session,方便实现广播、点对点通信

关键点在于:

  • 继承 AppSession → 写自己的 MySession
  • 实现 ISessionFactory → 告诉框架用哪个 Session
  • 注册到 DIservices.AddSingleton<ISessionFactory, MySessionFactory>()

这样,SuperSocket 就会把 Session 生命周期交给我们,真正做到 框架负责网络通信,我们专注业务逻辑

http://www.dtcms.com/a/518999.html

相关文章:

  • 湖州猪八戒做网站wordpress win linux
  • 网站设计背景图片怎么做的做IT的会做网站吗
  • 让人做网站需要准备什么条件互联网舆情报告
  • 网站被黑 原因做卡贴质量好的网站
  • 贵州 网站备案如何做付费阅读网站
  • 购物网站appwordpress 怎么安全
  • 车培训网站建设erp软件有哪些软件
  • 微信网站怎么制作长尾词在线挖掘
  • 天津网站制作机玩法部南县做网站多少钱
  • 做北京会所网站哪个好特色美食网站建设
  • 视频网站dedecmsh5海报模板
  • 博物馆网站建设情况说明推广计划英文
  • 商城网站制作的教程vps可以做wordpress和ssr
  • 自己如何做企业网站天元建设集团有限公司属于什么企业
  • 浙江短视频seo优化网站韶关做网站的公司
  • 网站更改建设方案模板wordpress免费还是收费
  • 中国寰球工程有限公司网站设计安徽建站优化哪里有
  • 美容院怎么建立自己的网站山网站建设
  • ...东莞网站公司动画制作软件电脑版
  • 网站编辑器网站改版html
  • 电商商城网站建设短剧个人主页简介模板
  • 网站建设jiq网站建设需要注意哪些
  • 网站建设销售技巧话术策划推广
  • 西安十强互联网站建设公司织梦网站图标
  • 怎么新建自己的网站如何开发一个微信公众号
  • 网站可以做哪些广告清远市建设工程交易中心网站
  • 什么行业做网站合适网站建设 域名 空间
  • wordpress整站搬家广州网络推广公司电话
  • 电子商务网站建设配色国外素材网站推荐
  • 建设网站只能是公司吗重庆网站运营公司