SuperSocket在.Net5中使用——AppSession和SuperSocketService篇

背景:我们都知道,在Socket编程中,需要关注和监控Server端和Client端的启动、连接等事件。那在SuperSocket中是怎样去实现呢,本文进行实例介绍,通过重写扩展自定义的AppSession和SuperSocketService

概念:在SuperSocket中,一个Session就代表一个客户端的连接,对客户端的管理、连接、监控事件都在AppSession相关方法中去实现;

一、编写自定义的AppSession

   public class MySession : AppSession
    {
        protected override ValueTask OnSessionClosedAsync(CloseEventArgs e)
        {
            Console.WriteLine("客户端关闭连接");
            return base.OnSessionClosedAsync(e);
        }

        protected override ValueTask OnSessionConnectedAsync()
        {
            Console.WriteLine("客户端连接成功");
            return base.OnSessionConnectedAsync();
        }
    }

然后在SuperSocketHostBuilder创建时指定:

SuperSocketHostBuilder.Create<MyPackage, MyFilter>()
.UseSession<MySession>();

二、编写自定义的SuperSocketService

    public class MyService<MyPackage> : SuperSocketService<MyPackage>
    {
        public MyService(IServiceProvider serviceProvider, IOptions<ServerOptions> serverOptions)
        : base(serviceProvider, serverOptions)
        {

        }

        protected override void OnNewClientAccept(IChannelCreator listener, IChannel channel)
        {
            Console.WriteLine("新客户端想要连接:" + listener.Options.Ip + ":" + listener.Options.Port);
            base.OnNewClientAccept(listener, channel);
        }

        protected override ValueTask OnSessionClosedAsync(IAppSession session, CloseEventArgs e)
        {
            Console.WriteLine("客户端断开连接:" + session.RemoteEndPoint);
            return base.OnSessionClosedAsync(session, e);
        }

        protected override ValueTask OnSessionConnectedAsync(IAppSession session)
        {
            Console.WriteLine("客户端连接成功:" + session.RemoteEndPoint);
            return base.OnSessionConnectedAsync(session);
        }

        protected override ValueTask<bool> OnSessionErrorAsync(IAppSession session, PackageHandlingException<MyPackage> exception)
        {
            Console.WriteLine("客户端错误:" + session.RemoteEndPoint + " Error:" + exception.Message);
            return base.OnSessionErrorAsync(session, exception);
        }

        protected override ValueTask OnStartedAsync()
        {
            Console.WriteLine("Service已启动...");
            return base.OnStartedAsync();
        }

        protected override ValueTask OnStopAsync()
        {
            Console.WriteLine("Service已关闭...");
            return base.OnStopAsync();
        }
    }

 

总结:这块其实没有复杂的地方,以及应用场景也是针对多客户端的连接成功,断开连接去处理,以及维护你的业务中Session字典。看情况去使用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值