(原创文章·转载请注明来源:http://blog.csdn.net/hulihui)
因为时间关系,匆匆发布了
开源框架EMTASS 2.0。目的有两个:希望其他使用者测试中发现问题或给点建议;第二,促使该框架不断完善与升级,为一个在用的Socket服务器升级新做些前期工作。
最近,在阅读两本名著《.NET设计规范:.NET约定、惯用法与模式》、《C#设计模式》,受益非浅的同时,常常将其中的思想和方法与EMTASS中具体实现比较,发现:EMTASS与真正的框架标准相差不只一点点!从《.NET设计规范》总结出的十个框架基本要素包括:安全、稳定、可靠、可验证、高性能、可集成、可扩展、后兼容、简单易用、一致性,EMTASS恐怕没有好好地满足一条!于是发布如下EMTASS完善与升级计划,既记录自己的一些思路,也想听听同行的建议。
- 增加一个服务器线程轮循休息时间属性:int ThreadSleepTime {set;},并根据某个线程当前忙/闲情况调整该值;
- 考虑更改TSocketServerBase中的两个属性Closed、ListenPaused的名称为:IsClosed、IsListenPaused;
- TSocketServerBase会话属性SessionCoreInfoList使用System.Collections.ObjectModel.Collection集合SessionCoreInfoCollection,原属性标记为[Obsolete];
- TSessionBase、TDatabase中不定义事件,使用委托对象属性,是否效率更好?
- 使用Fxcop1.36分析框架,并做相应修改;
- TSocketServerBase可以不应用泛型吗?
- 修改:2008年11月2日
- 按《.NET设计规范》说明,没有必要改Closed、ListenPaused为IsClosed、IsListenPaused;
- 考虑在TSocketServerBase中增加一个数据持久化字段和方法:SetDataPersistentFlag,满足不需要数据持久化要求的应用场景;
- 使用System.Threading.Timer完成资源清理工作,替代原来的ChessSessionTable线程;
- 如果TSessionBase/TDatabaseBase与TSocketServerBase仍然使用相同的事件,考虑抽象成两个接口:ISessionEvent、IDatabaseEvent,保证它们实现上的一致性;
- 考虑多端口侦听方式,增加一个端口集合字段和维护方法:PortCollection、AddPort()、RemovePort();
- 准备升级到IOCP实现,在TSessionBase中封装SocketAsyncEventArgs对象:
- 异步侦听AcceptAsync();
- 异步发送和接收SendAsync()/ReceiveAsync();