SuperSocket快速入门(三):实现你的AppServer和AppSession

什么是AppSession?

  AppSession 代表一个和客户端的逻辑连接,基于连接的操作应该定于在该类之中。你可以用该类的实例发送数据到客户端,接收客户端发送的数据或者关闭连接。同时可以保存客户端所关联的数据。

什么是AppServer?

  AppServer 代表了监听客户端连接,承载TCP连接的服务器实例。理想情况下,我们可以通过AppServer实例获取任何你想要的客户端连接,服务器级别的操作和逻辑应该定义在此类之中。

第一步:创建你的AppSession

  为什么要创建AppSession呢,本人认为,快速入门系统,以下三点足够你用的了。

  1. 需要重新实现会话创建、收到未知的协议数据的时候、处理异常等可重载的方法,像异常,只是做了记录日志操作,部分方法都是不处理。
  2. 需要关联一些数据,同时AppSession提供了可存放最多10个数据的Items的属性(IDictionary<object, object>类型)。
  3. 需要其他对象来实现自定义协议。
 1 // 在下面的代码中,当一个新的连接连接上时,服务器端立即向客户端发送欢迎信息。 这段代码还重写了其它AppSession的方法用以实现自己的业务逻辑。
 2 public class TelnetSession : AppSession<TelnetSession>
 3 {
 4     // 重载OnSessionStarted函数,赞同于appServer.NewSessionConnected += NewSessionConnected
 5     protected override void OnSessionStarted()
 6     {
 7         // 会话链接成功后的逻辑部分。
 8         this.Send("Welcome to SuperSocket Telnet Server");
 9     }
10
11     protected override void HandleUnknownRequest(StringRequestInfo requestInfo)
12     {
13         // 收到未知请求的逻辑部分
14         this.Send("Unknow request");
15     }
16
17     protected override void OnSessionClosed(CloseReason reason)
18     {
19         // 会话关闭后的逻辑代码
20         base.OnSessionClosed(reason);
21     }
22 }
23
24 // 你可以根据你的业务需求来给Session类增加新的属性
25 public class PlayerSession :AppSession<PlayerSession>
26 {
27     public int GameHallId { get; internal set; }
28
29     public int RoomId { get; internal set; }
30 }

上述代码中,两个自定义的AppSession都是使用的命令行协议。由于泛型约束,在自定义AppSession的时候,泛型TAppSession一定要指定所定义的类,很多朋友像命令无法加载啦、服务器启动不起来等等,都是因为这里定义错误造成的。

有朋友就会问了,为什么不能直接继承AppSession呢?不好意思,快速入门系列不做补脑,在第一章的内容中已经说过。

第二步:创建你的AppServer类型

如果你创建自己的AppSession并希望使用它,那么必须要创建所对应的AppServer。

 1 // 现在 TelnetSession 将可以用在 TelnetServer 的会话中,也有很多方法可以重载
 2 public class TelnetServer : AppServer<TelnetSession>
 3 {
 4     protected override bool Setup(IRootConfig rootConfig, IServerConfig config)
 5     {
 6         // 对家配置文件进行相应的修改。
 7         return base.Setup(rootConfig, config);
 8     }
 9
10     protected override void OnStartup()
11     {
12         // 服务器启动的逻辑部分
13         base.OnStartup();
14     }
15
16     protected override void OnStopped()
17     {
18         // 停止服务器的逻辑部分
19         base.OnStopped();
20     }
21 }

第三步:启动你的服务器

还记录上一节我们讲的内容,如何启动你的SS么?

// 第一种方法,代码启动。
static void Main(string[] args)
{
    // 注意是TelnetServer
    var appServer = new TelnetServer();
    appServer.Setup(2012);
    // 开始监听
    appServer.Start();
    while (Console.ReadKey().KeyChar != ‘q‘)
    {
        Console.WriteLine();
        continue;
    }
    // 停止服务器。
    appServer.Stop();
}

// 第二种方法,通过配置启动,需要注意的是,一定要注意配置好,不然启动会失败的,这里没有判断初始化成功与否,可以看源码里面的例子。
static void Main(string[] args)
{
    var bootstrap = BootstrapFactory.CreateBootstrap();
    bootstrap.Initialize();
    bootstrap.Start();
    while (Console.ReadKey().KeyChar != ‘q‘)
    {
        Console.WriteLine();
        continue;
    }
    bootstrap.Stop();
}

通过配置启动,需要注意的是,一定要配置正确,不然无法正常启动你的AppServer,其中serverType="AppServer的完整名称, 类所在程序集",如:serverType="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"。

到此,如何启动SS以及如果简单的实现你的AppServer和AppSession并启动你的AppServer完成,在下一章节中,我们讲解如果关联Command。

优点

  实现你自己的AppSession和AppServer允许你根据你业务的需求来方便的扩展SuperSocket,你可以绑定session的连接和断开事件,服务器实例的启动和停止事件。你还可以在AppServer的Setup方法中读取你的自定义配置信息。总而言之,这些功能让你方便的创建一个你所需要的socket服务器成为可能。

时间: 2024-07-30 23:52:08

SuperSocket快速入门(三):实现你的AppServer和AppSession的相关文章

AS3多线程快速入门(三):NAPE物理引擎+Starling[译]

原文链接:http://esdot.ca/site/2012/intro-to-as3-workers-part-3-nape-physics-starling [更新]Adobe在11.4正式发布的最后一刻移除了ByteArray.shareable功能的支持,推迟到11.5版本再发布.为了解决这个问题,源码已经被我更新过了.但这里还是留下完整的示例代码,因为它能最终会正常运行的. 在<AS3多线程快速入门>系列教程的第一部分中,我们研究了AS3 Worker的基本原理,包括多种通信方式,还

SuperSocket入门(二)- 探索AppServer、AppSession,Conmmand和App.config

在上一篇文章中,我们已经了解到了如何在SuperSocket处理客户端请求. 同时我们可能会发现一个问题,如果我们的服务器端包含有很多复杂的业务逻辑,这样的switch/case代码将会很长而且非常难看,并且没有遵循面向对象设计的原则(OOD). 在这种情况下,SuperSocket提供了一些让我们在多个独立的类中处理各自不同的请求的命令框架,接下来我们一起来看一下怎么使用 1.自定义AppSession AppSession 代表一个和客户端的逻辑连接,基于连接的操作应该放在该类之中.你可以用

mybatis快速入门(三)

上面2章写了mybatis的基本操作,今天就写写mybatis的动态代理吧. 动态代理有4个基本原则: 1.userMapper.xml里面的namespace="cn.my.dao.UserDaoMapper"一定要和接口的包名+接口名一致 2.userMapper.xml里面的statementid值要和接口中的方法名一致 3.userMapper.xml里面的入参类型要和接口中方法的参数类型一致 4.userMapper.xml里面的返回类型要和接口中方法的返回类型一致 好了不废

MySQL简单快速入门 (三)高级查询——JEPLUS软件快速开发平台

03.SQL高级查询_分组: 1).需求:一条查询,查询出每种商品的最高价格 2).分组的命令:group by 分组字段 3).实现上例: select category_id,max(price)  from product group by category_id; 查询顺序:先分组,再聚合 4).注意事项: 分组查询的结果最多只能包含:分组列,聚合结果,不能包含其他字段. 5).练习1: 需求:查询每个生产日期的商品的数量是多少? select  proDate,count(*)  fr

AndroidStudio快速入门四:打造你的开发工具,settings必备

http://blog.csdn.net/jf_1994/article/details/50085825 前言:这里是使用AS的基本设置,适合新入手的朋友阅读,将这里介绍的设置完基本使用无忧啦. 1.setting介绍 点击菜单栏:File | settings 快捷方式:ctrl+art+s 注意:我们可以在基本设置头部的搜索框直接输入你要设置的关键字直接进入 2.设置主题样式.字体大小 File | settings |Appearance&Behavior|Appearance 如上图中

程序员带你十天快速入门Python,玩转电脑软件开发(三)

声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群538742639.群马上就满了,名额不多. 这是高级程序员快速入门Python语言课程.助你快速学习Python语言.这是第三课. 程序员带你十天快速入门Python,玩转电脑软件开发(一) 程序员带你十天快速入门Python,玩转电脑软件开发(二) 因技术知识连贯性,还没有学习前两课的同学,建议点

【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

[第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策略(MVC5+EF6) [第四篇]ASP.NET MVC快速入门之完整示例(MVC5+EF6) [番外篇]ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6) 请关注三石的博客:http://cnblogs.com/sanshi 表单身份验证(Forms Authentication

快速入门git第三步

安装:一.在linux ubuntu 上安装git sudo apt-get install git配置:二.初次运行git的配置,为什么是初次,因为更新或升级都会沿用老的git的配置, 可以用相同的命令进行了配置的修改, git 提供了一个工具git config ,专门用来配置或读取相应的环境变量,不同的环境变量导致了git在各个环节的具体工作方式和行为,环境变量存放在三个地方:/ect/config: 系统中对所有的用户都普遍使用的配置-/config: 只是适用与当前用户的配置.git/

swift快速入门,三分钟上手

swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,三分钟上手swift快速入门,