服务器底层网络框架设计的一些思考

最近准备实现一个底层网络框架, 以供以后开发网络程序时使用。在开发的过程中,慢慢的意识到在框架设计中存在的一些问题。以下是自己的思考。


采用windows 还是 linux.    我选windows, 因为windows 的IOCP资料比较多, 而且提供的支持库,开发环境都比linux 要方便。可以首先在windows 上做一个实现。以后如果有需要的化,再移植到linux上. 只要系统架构设计合理,分层明确,移植应该不会太困难。
要提高服务器性能,一个重要部分就是内存的管理。 一般采用两种解决方法, 内存池 和Free List. 通过使用内存池,可以减少内存碎片,并提高内存分配,回收的速度。 这里我采用Boost 的Memory Pool.         Free List  主要是减少频繁使用对象的构建和解构操作, 在服务器中,有大量的Session对象,这些对象如果频繁构造,释放的化,对性能影响很大, 通过把这些对象缓存起来,应该对于服务器的性能提升有一定作用。
合理的分层和框架主设计模式的选择。 只有分层,才能设计出比较有扩展性的框架。 这里的分层,我参考的是ACE 的分层结构, 底层采用Wrapper Facade 模式,封装OS 的API在一些Class中,减少这些API被用错的机会, 同时也能够屏蔽OS的区别,方便以后的移植。 上层,选择采用Proactor模式, Proactor模式是专门用来处理异步IO 的模式, 实现的时候,我参考了ACE 的Proactor实现。 ACE 虽然有框架太庞大的缺点,但是框架设计上,确是有很高的参考价值的。
仅仅实现了Proactor模式, 对于实际的服务器开发,还是显得太简陋,上层需要做的事情还是很多。             可以通过针对某一类服务器,譬如TCP服务器,做一层封装,实现Session管理和网络层的控制,尽可能的减轻该框架使用者的任务量。
该框架还应该提供一些辅助类,如Buffer 读写类, 实现类似IoStream的Buffer读写,方便拆包,组包。    应用层线程池类, 方便应用层采用线程池处理包,提高性能。     
  今天先写到这里,可能分析的不全面,还存在一些问题,请大家指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值