zoukankan      html  css  js  c++  java
  • 关于 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,验证注明 博客园

  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/Chendezhou/p/7421611.html
Copyright © 2011-2022 走看看