配置系统引导启动SuperScoekt

SuperSocket源码解析之启动过程

一 简介

这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动

二 启动过程

2.1 配置解析

从读取配置文件开始,直接拿到一个SocketServiceConfig对象,这个类型封装了SuperSocket的所有配置,其主要包含了一下参数

1)服务器根配置

配置节点 "superSocket" SuperSocket 配置的根节点,它定义了 SuperSocket 所需要的全局参数。 让我们先看下根节点的所有配置属性:

  • maxWorkingThreads: 线程池最大工作线程数量;
  • minWorkingThreads: 线程池最小工作线程数量;
  • maxCompletionPortThreads: 线程池最大完成端口线程数量;
  • minCompletionPortThreads: 线程池最小完成端口线程数量;
  • disablePerformanceDataCollector: 是否禁用性能数据采集;
  • performanceDataCollectInterval: 性能数据采集频率 (单位为秒, 默认值: 60);
  • isolation: SuperSocket 服务器实例隔离级别
    • None - 无隔离
    • AppDomain - 应用程序域级别的隔离,多个服务器实例运行在各自独立的应用程序域之中
    • Process - 进程级别的隔离,多个服务器实例运行在各自独立的进程之中
  • logFactory: 默认logFactory的名字, 所有可用的 log factories定义在子节点 "logFactories" 之中, 我们将会在下面的文档中介绍它;
  • defaultCulture: 整个程序的默认 thread culture,只在.Net 4.5中可用;

示例:

<superSocket maxWorkingThreads="50" minWorkingThreads="10">
<servers>
<server name="TelnetServerA"
serverTypeName="TelnetServer"
ip="Any"
port="2020">
</server>
<server name="TelnetServerB"
serverTypeName="TelnetServer"
ip="Any"
port="2021">
</server>
</servers>
<serverTypes>
<add name="TelnetServer"
type="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"/>
</serverTypes>
</superSocket>

2) 服务实例配置

   <servers>
<server name="TelnetServerA"
serverTypeName="TelnetServer"
ip="Any"
port="2020">
</server>
<server name="TelnetServerB"
serverTypeName="TelnetServer"
ip="Any"
port="2021">
</server>
</servers>

3)所有类型配置

主要有: 日志类型工厂,连接过滤类型工厂,命令加载类型工厂,协议解析类型工厂

4)关键代码

这里的InitializeProviderFactories方法则是将形如

<serverTypes>
<add name="TelnetServer"
type="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"/>
</serverTypes>
之类的配置解析成TypeProviderCollection的集合,其子类型为TypeProvider,包含name和type两个属性

2.2 创建AppServer

其中CreateWorkItemInstance方法是将AppServer以反射方式实例化,仅此而已,重点在SetupWorkItemInstance,该方法使得AppServer所有配置得到初始化,而直接进入AppServer关键函数Setup

2.3 创建并初始化

1) 设置AppServer所需并发依赖的线程池设置:SetupBasic方法

默认的线程池最大最小是CLR的设置

默认将采用TextEncoding = new ASCIIEncoding();编码方式

2) 设置AppServer所需要的日志组件:SetupLogFactory

3) 初始化AppServer关联的ConnectFilter:

4) 初始化AppServer关联的命令加载器:SetupMedium,默认的命令加载器器

5)初始化AppServer安全证书,监听器,构建命令等SetupAdvanced

6) Setup用于子类重写

7)初始化SocketServer和默认的协议解析为服务启动做好最后准备:SetupFinal

2.4 启动

其实AppServer启动本质是把SocketServer启动起来,将服务器监听Socket实例化并进入监听状态,并触发AppServer启动事件;而SocketServer则需要根据配置设定最大连接数,接收缓冲区初始化,准备好IOCP代理SocketAsyncEventArgs,以及发送队列,自此SuperSocket已进入工作状态。

在这个短长的启动过程中配置部分占据了一大部分代码,而加之工厂模式大量使用导致配置解析过程变得相对复杂,而AppServer本身就是有工厂创建,

对于AppServer的实例来说AppServer本身的配套的相关组件(日志,连接过滤,命令,解析等)就够了

而不是还直接引用着这些配套组件的工厂,这样使得AppServer既包含了这些工厂又包含了这些工厂所创建的实例,显得代码有些臃肿

当前标签: SuperSocket

 
SuperSocket源码解析之消息处理 cuit_igis 2016-06-28 16:23 阅读:318 评论:0  
 
SuperSocket源码解析之会话生命周期 cuit_igis 2016-06-27 21:13 阅读:65 评论:0  
 
SuperSocket源码解析之启动过程 cuit_igis 2016-06-27 17:06 阅读:233 评论:0  
 
SuperSocket源码解析之配置系统 cuit_igis 2016-06-26 22:36 阅读:294 评论:1  
 
SuperSocket源码解析之开篇 cuit_igis 2016-06-26 15:05 阅读:218 评论:0  
 
 

配置系统引导启动SuperScoekt的更多相关文章

  1. 修改win8系统中启动管理器的系统引导信息

    最近用某软件做了个启动U盘,软件安装在电脑上,启动盘很快做完了,结果重启电脑的时候发现悲剧,windows启动后会显示出一个系统引导菜单,显示有3秒倒计时但是倒计时结束依然不能自动进入系统.. 然后. ...

  2. virtualbox 使用USB引导启动安装系统

    想要测试u盘系统引导有没有问题,从u盘中启动我烧录的Android x86系统. 这种方式可以在已有空的虚拟机上直接启动U盘中的系统. 百度上能搜到的方式都是使用CMD命令(懒人表示太麻烦--),so ...

  3. 在ubuntu上搭建开发环境3---解决Y470一键系统重装之后恢复ubuntu引导启动的方法

    2015/08/18 将知识.常用的操作整理出来一定要完整,注意细节. 就像下面是再2015.04.27时候整理的,当时确实实验成功了,但是可能忘记记下具体的细节,尤其是3.4.5.6步骤中的关于盘符 ...

  4. Linux系统在启动过程中grub引导文件丢失的解决方法

    在/boot/grub2目录下有一个grub.cfg文件:该文件主要是用来自动地引导系统启动内核程序和系统的初始化程序. 问题一:当系统在启动的情况下,我们不小心删除/boot/grub2/grub. ...

  5. WinSetupFromUSB制作多系统U盘引导启动

    重装系统有各种方式,比较常见的有做系统引导U盘.刻录PE.硬盘一键安装等.但是有很多缺点,国内大部分用的Ghost系统,内含各种捆绑软件,系统极其不安全.稳定,另外制作U盘启动也只能做一个系统的安装盘 ...

  6. 实测win10 efi启动及centos7双系统引导顺序修改

    安装win10 安装win10过程中,系统自动建立esp分区,分区格式为FAT16,目录如下 1,EFI/Boot文件夹保持不动 删除 EFI/Microsoft/boot/ 文件夹下面除BCD文件外 ...

  7. Linux系统引导过程及排除启动故障

    一.Linux操作系统引导过程二.系统初始化进程1.init进程2.Systemd3.Systemd单元类型三.排除启动类故障[1].修复MBR扇区故障(含实验过程)[2].修复GRUB引导故障●方法 ...

  8. 详解linux系统的启动过程及系统初始化

    一.linux系统的启动流程 关于linux系统的启动流程我们可以按步进行划分为如下: POST加电自检 -->BIOS(Boot Sequence)-->加载对应引导上的MBR(boot ...

  9. Linux系统快速启动方案

    =========================        基本常识       ========================= Linux系统基本启动流程: 1. CPU从ROM(如果有的 ...

随机推荐

  1. Vmware虚拟机时间不准问题

    测试程序时碰到虚拟机经常时间不准,深受困扰,后来发现虚拟机有一个设置可以同步虚拟机和宿主机的时间: 该功能需要vmware tools安装成功才能有效.vmware tools的安装就不多细说了,至于 ...

  2. C#共享内存类改进版

    原文 C#共享内存类改进版 改进说明及源码实例下载见:http://blog.csdn.net/zzh8845/archive/2008/11/22/3349963.aspx ShareMem.cs ...

  3. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  4. Azure 网站的新增功能:可配置的环境变量

     编辑人员注释:本文章由 WindowsAzure 网站团队的项目经理Erez Benari撰写. Azure最常用的强大功能之一是 XML文档转换 (XDT),通过此功能,您可以在Windows ...

  5. android下文件下载

    public static void downFile(final String url){ new Thread(){ public void run(){ FileOutputStream os= ...

  6. golang语法学习(一):变量,常量以及数据类型

    学习一门新的语言肯定是要从他的主要的语法開始,语法构成了整个程序设计的基础,从语法中我们也能够看到这门语言的一些特性.可是话说回来.语法这东西,不同的语言大同小异,所以这也对语法的记忆造成了一定的难度 ...

  7. opencv第一站:配置opencv环境(2015-12-12)

    今天论坛申请的书< OpenCV 计算机视觉编程攻略(中国工信出版社)>到了,准备研究研究机器视觉. 晚上安装了 vc2008 及 opencv 最新版 3.0.0,试了各种配置都是错误提 ...

  8. Oracle/Mysql批量插入的sql,效率比较高

    1.oracle 批量插入: insert into tableName(col1,col2,col3...)    select 1,'第一行第一列值','第二列值' from dual union ...

  9. Python 模块(八) socketserver 以及 线程、进程

    目录 异常处理 socketserver 线程.进程 一.异常处理 try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执 ...

  10. 微软http api说明书地址

    https://msdn.microsoft.com/en-us/library/windows/desktop/aa364622(v=vs.85).aspx https://msdn.microso ...