配置系统引导启动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

时间: 2024-10-26 03:07:16

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

U盘、移动硬盘引导启动安装linux系统【Centos 6.4 】

U盘.移动硬盘引导启动安装linux系统[Centos 6.4 ] U盘.移动硬盘引导启动安装linux系统[Centos 6.4 ]( rhel基本相同) 本文案例是我安装32系统的,64位时U盘单个文件大于4G不能fat32格式问题暂时没提供,有条件时一定研究下在补上,现在是老爷机. 6.0 .6.3live cd均试验过只是存放位置有差异.需要工具UltraISO软碟通,LiveCD.iso,Centos-6.X.iso(自己要安装的系统版本) 1.准备1个U盘或移动硬盘.(容量大小按需要

U盘移动硬盘引导启动安装linux系统Centos 6.4

U盘.移动硬盘引导启动安装linux系统[Centos 6.4 ] U盘.移动硬盘引导启动安装linux系统[Centos 6.4 ]( rhel基本相同) 本文案例是我安装32系统的,64位时U盘单个文件大于4G不能fat32格式问题暂时没提供,有条件时一定研究下在补上,现在是老爷机. <p style=\"\\"padding:0px;color:#333333;font-family:tahoma,\"> 6.0 .6.3live cd均试验过只是存放位置有

u盘安装linux,将grub安装到了u盘,导致没U盘系统无法引导启动的解决方法

今天用U盘装linux时候不小心将grub安装到了U盘上,导致每次启动系统都得插U盘,下面是解决办法,拷贝时忘了记下转载出处,实在不好意思.————————————————————————————————————————————————————————————————装redhat linux的时候用的是u盘安装,不小心把grub装在了u盘上,然后每次都要从u盘启动,当然不能容忍这样子,以下就是修复grub的过程: u盘引导进入系统后,首先查看系统安装位置,也就是执行df -k 查看系统盘/bo

解决Y470一键系统重装之后恢复ubuntu引导启动的方法

一键还原,之后再在最初的win7家庭普通版上进行升级,但是也出现了另外的问题:系统重启之后,直接进入到windows,而原来的ubuntu的引导启动没有了,所以需要解决. 1.参照原来制作ubuntu14的U盘启动盘的方法,制作U盘启动盘,然后重启电脑,,从U盘启动,笔者笔记本是联想系列的,开机按下f12即可选择先启动哪个设备,若大家情况和笔者不同,不知道该怎样启动U盘,请先百度一下相关内容. 下图是现场拍的: 稍等片刻后,将进入ububtu14的安装和试用界面,这里我们选择了“中文(简体)”,

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

重装系统有各种方式,比较常见的有做系统引导U盘.刻录PE.硬盘一键安装等.但是有很多缺点,国内大部分用的Ghost系统,内含各种捆绑软件,系统极其不安全.稳定,另外制作U盘启动也只能做一个系统的安装盘,如果想换个系统还要另外刻录,费时费力. 0x00 简介 WinSetupFromUSB是一款制作从usb磁盘(u盘和移动硬盘)启动安装操作系统的强大工具,支持各种windows.pe.linux操作系统.Windows纯净镜像请在MSDN我告诉你下载.各种Linux镜像请在各自官网下载.(所有镜像

使用UltraISO制作u盘启动盘,系统引导光盘(CD/DVD)制作

光盘映像启动介质可直接使用UltraISO制作u盘启动盘,系统引导光盘(CD/DVD)制作.UltraISO涵盖了六种写入类型:USB-HDD.USB-ZIP.USB-HDD+.USB-ZIP+.USB-HDD+ v2.USB-HDD+ v2,根据不同兼容性,满足启动盘的制作要求. 原文地址:https://blog.51cto.com/ruguworking/2423722

[Linux学习笔记] Linux系统引导流程(一)

前面我们已经介绍过以CentOS为例的Linux系统的安装以及Linux常用命令的使用,本节内容我们将介绍Linux系统引导流程.当按下电源的那一刻,到我们看到用户界面,这其中都发生了些什么呢?赶快来一探究竟. 下图为Linux系统引导流程过程图: 以下对Linux引导流程过程做一个简单的说明: 1. POST加电自检 POST(POST ON SELF TEST)首先对每一个设备进行检查,完成后会寻找存有引导记录的设备,找到读入操作系统的引导记录,将系统控制权交给引导记录. 2. MBR引导

系统引导UEFI 引导,Win下挂载EFI分区教程

首先了解几个东西: 1. MBR分区表:Master Boot Record,即硬盘主引导记录分区表,只支持容量在 2.1TB 以下的硬盘,超过2.1TB的硬盘只能管理2.1TB,最多只支持4个主分区或三个主分区和一个扩展分区,扩展分区下可以有多个逻辑分区. 2. GPT分区表:GPT,全局唯一标识分区表(GUID Partition Table),与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制,但Windows最大仅支持128个GPT分区,GPT可管理硬盘大小达到了18EB.只有

Linux系统无法启动故障解决方案

Linux系统无法启动故障解决方案 2011-09-27 09:42 佚名 比特网 我要评论(0) 字号:T | T 不管你多么喜爱你的Linux系统机器,有时候你都必须恢复你的系统.是的,即使一台Linux系统机器也可能遭受系统崩溃:不管是由于视频配置错误.内核更新出错.或是由于init脚本配置错误,这种情况都是必然的. AD:2014WOT全球软件技术峰会北京站 课程视频发布 当你的心爱的linux系统出现故障的时候,你是如何来解决的呢?没有操作系统能够确保100%可靠.终有一天,即使Lin