2013年3月9日

SuperSocket的研究(3)—— 通过配置启动SuperSocket

为什么使用配置来启动

  1. 拒绝硬编码(写死代码)
  2. SuperSocket提供多种有用的配置选项
  3. 充分利用SuperSocket的工具

如何通过带引导程序的配置启动服务器

SuperSocket配置结点使用.NET默认的配置技术,下面是一个为SuperSocket设计的配置结点:
<configsections>
    <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
</configsections>
服务器实例配置
<supersocket>
    <servers>
      <server ip="Any" name="TelnetServer" port="2020" 
          serverType="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, 
          SuperSocket.QuickStart.TelnetServer_StartByConfig">
      </server>
    </servers>
</supersocket>

接下来,解释配置中的server结点:
  • name:AppServer实例的名字
  • serverType:将被运行的AppServer的全名。serverType属性中的值由“,”分隔,第一部分是Serve类的全称(命名空间+类名);后一部分则是该类所在的程序集的名称,通常也就是你自己的项目名称(注意区别于命名空间)。
  • ip:监听的IP
  • port:监听的端口
完整的配置介绍将在下一篇文章中。
使用引导程序来启动SuperSocket
static void Main(string[] args)
{
    Console.WriteLine("Press any key to start the server!");

    Console.ReadKey();
    Console.WriteLine();

    var bootstrap = BootstrapFactory.CreateBootstrap();

    if (!bootstrap.Initialize())
    {
        Console.WriteLine("Failed to initialize!");
        Console.ReadKey();
        return;
    }

    var result = bootstrap.Start();

    Console.WriteLine("Start result: {0}!", result);

    if (result == StartResult.Failed)
    {
        Console.WriteLine("Failed to start!");
        Console.ReadKey();
        return;
    }

    Console.WriteLine("Press key 'q' to stop it!");

    while (Console.ReadKey().KeyChar != 'q')
    {
        Console.WriteLine();
        continue;
    }

    Console.WriteLine();

    //停止服务器
    bootstrap.Stop();

    Console.WriteLine("The server was stopped!");
    Console.ReadKey();
}
一些配置的例子:
  1. 服务器类型结点:
  2. <superSocket>
            <servers>
              <server name="TelnetServer"
                  serverTypeName="TelnetServer"
                  ip="Any" port="2020">
              </server>
            </servers>
            <serverTypes>
                <add name="TelnetServer" type="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"/>
            </serverTypes>
        </superSocket>
    
  3. 多服务器实例:
  4. <superSocket>
            <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>
      

由SuperSocket提供的运行容器——SuperSocket.SocketService.exe

直接使用SuperSocket.Socket.Service.exe
  1. 确保你的服务器所需的所有程序集,包括SuperSocket.SocketService.exe都存放在同一目录下。
  2. 将你的SuperSocket配置结点复制到SuperSocket.SocketService.exe.config文件中。
  3. 直接运行SuperSocket.SocketService.exe,你定义的服务器将开始运行。

将SuperSocket.SocketService.exe安装为Windows服务

使用命令行参数“-i”可以将SuperSocket.SocketService.exe安装为Windows服务:SuperSocket.SocketService.exe -i
安装后的Windows服务的名称被定义在配置文件中,可以根据自己的需要修改。
<appSettings>
    <add key="ServiceName" value="SupperSocketService" />
</appSettings>
可以通过命令行参数“-u”来卸载已安装的服务:SuperSocketService.exe -u

没有评论:

发表评论