最近要作网络方面的工作,主要的需求就是实现一个Reactor框架!所以花时间研究一下cpp可用的开源的网络库,在所有开源的cpp网络库中,常用的也就是ACE、libevent、l以及Boost.ASIO顺带一提我比较熟悉的libev!
首先说说ACE,第一印象就是“庞大”(20万行的代码),一大堆东西(memory pool、thread pool、定时器、recursive locks)应有尽有了!是一个大型的中间件解决方案。一堆的设计模式,多层构架,使用的时候要考虑好选择哪一层来使用,更关键的是夸平台,我前面I/O聚集和分离解决方案的文章中传输文件描述符的代码就是参照这个里面的代码写地。ACE用起来很象java,但是本不像业务层语言,如果真要用ACE我觉得就不要当作是一个网络库使用,而是一个开发框架(虽然比不上osgi);不然投入和产出比不高,学的太多用的太少!
libev是一个c语言写成的网络库,这个库我在学校的时候就用过,它封装了linux的epoll(所以可移植性就没有了),代码量少并且很简洁,易究和学习原理,感觉没有什么实际的使用意义。(顺带一提epoll是在活跃链接少的情况下效率高,如果[活跃链接/总链接]大的情况下和select模型没有什么区别,所以epoll适合断连接)。
libevent