• SuperSocket入门(三)-Telnet多服务实例和服务实例交互配置详解


        在SuperSocket入门(二)中我们已经简单了解了通过配置App.config文件使用BootStrap启动SuperSocket服务。我们先来看一下上个案例中的基本配置文件示例:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <configSections>
    <!--log 日志记录-->
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
    <!--SocketEngine-->
    <section name="superSocket" type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine"/>
    </configSections>
    <!--服务信息描述,在window服务模式下的名称标识-->
    <appSettings>
    <add key="ServiceName" value="SupperSocketService"/>
    <add key="ServiceDescription" value="黄昏前黎明后的Socket程序"/>
    </appSettings>
    <!--SuperSocket服务配置信息 serverType是项目的服务如我自定义的myserver-->
    <!--name: 实例名称
    serverType: 实例运行的AppServer类型
    ip: 侦听ip
    port: 侦听端口-->
    <superSocket>
    <servers>
    <!--textEncoding 编码方式"gb2312","utf-8" 默认是acii-->
    <server name="SuperSocketDemo" textEncoding="gb2312" serverType="SuperSocketDemo.Server.MyServer,SuperSocketDemo" ip="Any" port="2020" maxConnectionNumber="100">
    </server>
    </servers>
    </superSocket>
    <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
    </startup>
    </configuration>
    App.config

           1、服务名称:

           <appSettings>

                <add key="ServiceName" value="SupperSocketService"/>

                <add key="ServiceDescription" value="黄昏前黎明后的Socket程序"/>
           </appSettings>
           这个配置项将被用作SuperSocket系统服务的名称。如果ServiceName设置成SupperSocketService, 则运行InstallService.bat这个批处理文件之后(注意:该处理文件使用的是SuperSocket.SocketService.exe -i命令,使用supersocket.socketservice.exe务必使server所需要的所有程序集都和SuperSocket.SocketService.exe在同一目录), SuperSocket系统服务将以"SupperSocketService"这个名字安装到系统之中。
     
         2、 SuperSocket的根配置
           <socketServer loggingMode="IndependantFile">
                     ....
           </socketServer>
          根配置中的参数详情:
           loggingMode 值:           ShareFile: 多个服务器实例共享同日志文件,默认选项;
                                       IndependantFile:多个服务器实例拥有独立的日志文件;
                                                  Console: 控制台日志输出,只在控制台应用程序中有效。
           maxWorkingThreads:线程池最大工作线程数量
           minWorkingThreads:线程池最小工作线程数量
           maxCompletionPortThreads:线程池最大完成端口线程数量
           minCompletionPortThreads:线程池最小完成端口线程数量
     
             3、服务器实例配置
             <servers>
                  <server name="SuperSocketDemo" textEncoding="gb2312" serverType="SuperSocketDemo.Server.MyServer,SuperSocketDemo" ip="Any" port="2020" maxConnectionNumber="100">
                  </server>
             </servers>
             服务器实例配置详情:
    • name: 服务器实例名称
    • serviceName: 指定服务器实例运行的服务的名称。此名称为定义此服务器实例运行的服务的节点的名称。
    • ip: 指定socket服务器监听的服务器IP地址。Any: 监听本机所有的IPv4地址;IPv6Any, 监听本机所有IPv6的地址。
    • port: 指定socket服务器监听的端口。
    • mode: Sync:同步模式;Async: 异步模式;Udp: Udp协议
    • disabled: true或者false。是否禁用该服务器实例,默认为否。
    • readTimeOut: 从socket读取数据超时时间,默认为0。
    • sendTimeOut: 从socket发送数据超时时间,默认为0。
    • maxConnectionNumber: 最大允许的客户端连接数目,默认为100。
    • receiveBufferSize: 用于接收数据的缓冲区大小,默认为2048。
    • sendBufferSize: 用户发送数据的缓冲区大小,默认为2048。
    • logCommand: true或者false,是否记录命令。
    • clearIdleSession: true或者false, 是否清除空闲会话,默认为false。
    • clearIdleSessionInterval: 清除空闲会话的时间间隔,默认为120,单位为秒。
    • idleSessionTimeOut: 会话超时时间,默认值为300,单位为秒。
    • security: Empty, Tls或者Ssl3。 Socket服务器所采用的传输层加密协议,默认值为空。
    • maxCommandLength: 最大允许的命令长度,默认值为1024。
    • disableSessionSnapshot: 是否禁用会话快照,默认值为false。(1.4 SP1)
    • sessionSnapshotInterval: 生成会话快照的时间间隔。默认值为5,单位为秒。
    • keepAliveTime: keep alive消息发送时间间隔。默认值为600, 单位为秒。
    • keepAliveInterval:keep alive失败重试的时间间隔。默认值为60, 单位为秒。
           4、多服务器实例的配置
           SuperSocket支持在同一程序中运行多个服务器实例监听在不同的IP或端口,只需在配置文件中添加两个server节点,设置不同的实例名称和IP端口组合即可。
     
    <servers>
         <server name="MyServerA"
              serviceName="SupperSocketServiceA"
              ip="Any"
              port="2016">
    </server>
    <server name="MyServerB"
              serviceName="SupperSocketServiceB"
              ip="Any"
              port="2017">
    </server>
    <services>
             <service name="SupperSocketServiceA" type="SuperSocketDemo.Server.MyServerA,SuperSocketDemo.SupperSocketServiceA" />
             <service name="SupperSocketServiceB" type="SuperSocketDemo.Server.MyServerB,SuperSocketDemo.SupperSocketServiceB" />
    </services>
             服务配置
             name: 服务定义的名称,即服务器实例节点serviceName所对应的名称。
             type: 该服务所对应MyServer类型的完整名称。
            在某些情况下,需要两个服务器实例之间进行交互。例如MyServerA上的客户端C1向MyServerB上的客户端C2转发消息,这样就需要MyServerA接收到C1的命令之后通过MyServerB将消息转发给客户端C2。在MyServerA的OnStartup方法里面可利用SocketServerManager的GetServerByName(string name)方法通过服务器实例的名称来获取服务器实例:
     
    public class MyServerA : AppServer
    {
    private IDespatchServer m_DespatchServer;
     
    protected override void OnStartup()
    {
    m_DespatchServer = SocketServerManager.GetServerByName("ServerB") as IDespatchServer;
    base.OnStartup();
    }
     
    internal void DespatchMessage(string targetSessionKey, string message)
    {
    m_DespatchServer.DispatchMessage(targetSessionKey, message);
    }
    }
    MyServerA 类
    public class MyServerB : AppServer, IDespatchServer
    {
    public void DispatchMessage(string sessionKey, string message)
    {
    var session = GetAppSessionByIndentityKey(sessionKey);
    if (session == null)
    return;
     
    session.SendResponse(message);
    }
    }
    }
    MyServerB 类
    interface IDespatchServer
    {
    void DispatchMessage(string sessionKey, string message);
    }
     
    IDespatchServer类 
          这样就可以在MyServerA中通过调用MyServerB实例的方法来向MyServerB的客户端发送消息了。使用 SuperSocket 实现 Socket 服务器的时候,不可避免的需要在配置文件中定义一些参数。 SuperSocket 提供了非常简单的方法,让我们在配置文件中定义这些参数,然后在代码中读取它们。服务端扩展配置,自定义属性字段我们后面再来学习。
  • 相关阅读:
    推荐文章:深入浅出REST
    推荐Fowler作序的新书《xUnit Test Patterns》
    测试替身:Test Double
    踢毽也能治胃病,适当的运动带来健康,健康带来快乐
    10分钟入门AOP:用PostSharp普及一下AOP
    推荐一本新的英文版算法书和一本讲debug的书
    emacs开发rails的演示
    转:一个土木工程师在四川地震灾后的思考
    多语言多范型编程PPP
    巧用editplus学习正则表达式
  • 原文地址:https://www.cnblogs.com/fly-bird/p/6329653.html
Copyright © 2020-2023  润新知