开始学习Libevent

虽然基于reactor模式的异步IO被吹的神乎其神,但是我一直对这些东西不怎么感冒。因为我一直是在写后台服务,我所需要处理的并发连接数也就10来个,那么干嘛要用它呢?我还是比较偏好于thread-per-connection模式。

我想把ACE抛掉,换一个轻量级一点的网络库。看了一圈,都在推荐libevent/libev。然后就想,要不就拿libevent写一个简单的http server吧。其实也不是我写,就是把网上现成的一些库,组装起来而已。

http: https://github.com/ellzey/libevhtp
getopt: http://code.google.com/p/google-gflags/
log: http://code.google.com/p/google-glog/
smarty for C++: http://code.google.com/p/google-ctemplate/

可以把这些东西组装起来写一些简单的小页面。

libevent的代码我用VC++编译过去了,但是libevhtp却不行。比较令我头疼的是,想找一个C++的、http的协议实现,真的很不容易。ACE自带了一个,主要是给client使的,但是header parser之类的可以挪来用。libevent自带了一个,被骂的狗血淋头,那东西似乎就不应该被编译到Lib里面,应该放到一个example目录里,仅供观赏。

其实,在想另外一个问题:

如果一个请求的处理时间非常短,那么reactor模式非常好。

如果一个请求的处理时间相对较长,那么reactor模式+thread pool也可以work。虽然多了一次线程切换,但是相对总体的处理时间来说这不算什么。

于是,它就是一个万能模式啊。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥