关于 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,验证注明 博客园