您的位置:首页 > 理论基础 > 计算机网络

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

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

采用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读写,方便拆包,组包。 应用层线程池类, 方便应用层采用线程池处理包,提高性能。
今天先写到这里,可能分析的不全面,还存在一些问题,请大家指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息