• 关于 supersocket 不能通过Bootstrap 启动


    App.config内容

    
    
     
     <configSections>
        <section name="superSocket"
             type="SuperSocket.SocketEngine.Configuration.SocketServiceConfig, SuperSocket.SocketEngine" />
      </configSections>
    
      <superSocket>
    <servers>
    <server name="B_STMP_Server" textEncoding="gb2312" serverType="B_STMP_Server.RTU.RTUServer, B_STMP_Server" ip="Any" port="2020" maxConnectionNumber="100">
    </server>
    </servers>
    </superSocket>
    要点:serverType="B_STMP_Server.RTU.RTUServer, B_STMP_Server" 

    逗号 前面的  B_STMP_Server.RTU.RTUServer 是 自定义 appserver 的类型的全名
    逗号 后面的 不知道什么意思(此处不求甚解了)参考的官方的文档就是这么写的,
    B_STMP_Server不行的话 就换成 B_STM_Server.RTU


    App.config中的配置正确之后 还是会 Bootstrap.Initialize 失败

    后来经过反复排查 得出以下结果

    public RTUServer(): base(new DefaultReceiveFilterFactory<RTUReceiveFileter, RTUReqInfo>()) //使用默认的接受过滤器工厂 (DefaultReceiveFilterFactory)
            {
                this.NewSessionConnected += new SessionHandler<RTUSession>(_RTUServer_NewSessionConnected);
                this.NewRequestReceived += new RequestHandler<RTUSession, RTUReqInfo>(_RTUServer_NewRequestReceived);
                this.SessionClosed += new SessionHandler<RTUSession, CloseReason>(_RTUServer_SessionClosed);
    
                LogHelper.Info("RTUServer Started");
            }
    

      

    如果 把 

    LogHelper.Info("RTUServer Started");

    换成

    console.write("RTUServer Started");

    Bootstrap 就会初始化 失败 原因不明 但能隐约猜到



    如果不用 Bootstrap 启动 Server,而是在代码中调用 Server的start方法来启动server的话。

    即使在Server的构造方法里面 写上
    console.write("RTUServer Started");

    服务照样能启动,并且 控制台 也能 正常打印出 RTUServer Started


    另外 之前一直纠结了很久 的如何 在使用 Bootstrap 启动Server 的同时 也能指定服务器对象的 各种回调函数 (委托) 这个问题

    其实很简单,回调函数不仅可以使用某一个对象的属性来添加,也可以直接在类的构造方法中直接添加。

    如下:
    this.NewSessionConnected += new SessionHandler<RTUSession>(_RTUServer_NewSessionConnected);
                this.NewRequestReceived += new RequestHandler<RTUSession, RTUReqInfo>(_RTUServer_NewRequestReceived);
                this.SessionClosed += new SessionHandler<RTUSession, CloseReason>(_RTUServer_SessionClosed);


    而不是非要实例化一个对象之后 通过对象添加。





    博主从事:物联网数据采集(wifi gprs 以太网 zigbee )的 终端 软硬件, 服务端软件 设计和开发工作 ,技术讨论或合作 加QQ群:389268470,验证注明 博客园

  • 相关阅读:
    Opencv 图像矩
    Opencv Convex Hull (凸包)
    Opencv 发现轮廓 findContours
    Opencv Match Template(轮廓匹配)
    python操作mysql数据库的常用方法使用详解
    mongodb数据库集群及sharding分片配置
    mongodb数据库安装及常见操作
    windows下搭建eclipse关于python的开发环境及初始化参数配置
    python环境下使用tab自动补全命令
    ubuntu系统初始化网络及mysql配置
  • 原文地址:https://www.cnblogs.com/Chendezhou/p/7421611.html
Copyright © 2020-2023  润新知