LibEvent使用经验

最近一个项目中需要提供一个简单的采用http post协议的服务,开发语言是C++,考虑到各种因素,最终决定直接采用libevent,一方面比较熟悉,另一方面也可能复用其提供的定期事件回调,不然自己编写一个类似Reactor的框架花费太大。

下面是一些关于libevent的介绍文章:

官方网站:http://libevent.org/

官方手册:http://www.wangafu.net/~nickm/libevent-book/

API文档:http://www.wangafu.net/~nickm/libevent-2.1/doxygen/html/

Min同学的分享:http://54min.com/post/http-server-using-libevent.html

中文手册:

  1. 前言
  2. 设置libevent(上)
  3. 设置libevent(下)
  4. 异步IO简介
  5. 创建event_base
  6. 与事件循环一起工作
  7. 与事件一起工作
  8. 辅助类型和函数
  9. bufferevent:概念和入门
  10. Evbuffers用于缓冲IO的实用工具 
  11. 连接侦听器: 接受 TCP 连接

下面介绍我在使用中的一些经验:

1. libevent2.0之后的版本,建议都使用 event_base_* 接口,这样可以在一个应用程序中创建多个event_base结构,在不同线程开启多个消息循环,进一步利用CPU资源。

2. libevent2.0之后,建议不要再链接libevent,而是根据需要链接libevent_core,libevent_extra。其中:libevent_core提供了event_base, evbuffer, bufferevent,utility等常用方法;libevent_extra则提供HTTP, DNS, 以及RPC等高级功能;另外,如果以多线程方式使用libevent,则还需要链接libevent_pthreads;如果用到ssl,可以再链接libevent_openssl。

3. 关于是否需要链接libevent_pthreads,很多人不是很清楚,我可以举个例子,当某个线程中正在执行event_base_loop()时,只有当这个线程中某个事件被触发,然后在事件回调中调用event_base_loopbreak()或event_base_loopexit()才能停止消息分发(如果是单线程程序,也可以在信号处理函数中调用),如果没有libevent_pthreads,并指定使用线程特性,则在其他线程中调用event_base_loopbreak()或event_base_loopexit()是无法立即停止这个正在跑的线程的,只有使用使用了 evthread_use_pthreads() 或 evthread_windows_pthreads()的程序才能在其他线程关闭这个消息循环。

4. 如果希望一次event_base_loop()或event_base_dispatch()在跑一定时间后结束,应该先调用event_base_loopexit(),配置好超时,再调用event_base_loop(),这样才会在到达超时后结束。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值