首页libevent › 处理大并发之三 对libevent的初步认识

处理大并发之三 对libevent的初步认识

首先翻译下http://www.wangafu.net/~nickm/libevent-book/01_intro.html里的一段文章

对异步IO的一个简要介绍

大多数应用程序都是阻塞的IO调用,如果IO调用是同步(阻塞)的,它不能立即返回直到它的操作完成,或者经过了很长时间直到网络栈丢弃。当你在一个TCP连接上调用”connect()”时,例如,你的操作系统从TCP连接的另一端主机排队等待一个SYN包时。它不能立即返回你的应用程序,直到从连接的另一端主机收到SYN ACK包,或者经历了足够的时候,驱动层丢弃。

libevent简要介绍

Libevent是一个轻量级的开源高性能网络库。

Libevent特点: (来自http://www.cnblogs.com/hustcat/archive/2010/08/31/1814022.html
(1)事件驱动(event-driven),高性能;
(2)轻量级,专注于网络,不如 ACE 那么臃肿庞大;
(3)源代码相当精炼、易读
(4)跨平台,支持 Windows、Linux、*BSD和 Mac Os;
(5)支持多种 I/O多路复用技术,epoll、poll、dev/poll、select 和kqueue 等;
(6)支持 I/O,定时器和信号等事件;
(7)注册事件优先级;
Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomi t、 Nylon、 Netchat等等。

至目前为止资料也看了一部分,源码也看了一部分,我觉得研究源码,查资料,分析源码都很重要,但是最关键的是做demo分析demo。

现在想使用libevent做一个服务端的程序,结合之前使用epoll做的客户端程序做测试。

刚开始的时候在网上找了一个demo,结果编译不过,折腾半天还是放弃了。

郁闷了半天,找到一个例子不错,分享出来,我自己分析了下,修改了一些细节然后加了些注释,代码来源于:http://www.felix021.com/blog/read.php?2068 (尊重原创)

对了,这里不在陈述libevent的安装,之前在研究memcache里有相应的介绍,链接:

其实安装基本都是./configure –prefix=路径,然后make && make install就可以了

服务端demo代码:libevent_server.c

编译:

gcc -I/usr/include -o 123 libevent_server.c -L/usr/local/lib -levent

注意这里应该是包含文件的路径和库文件的路径加上去,具体路径取决于安装目录

测试1::将客户端的并发数设置为2,查看运行结果

服务端:
20130717210914656
客户端:
20130717211007578

测试2:将客户端的并发数设置为10000,(如果没有修改内核,需要修改句柄的最大数,ulimit –n 65535)查看端口占用结果:

lsof –i:8000 >log

grep “TCP localhost.localdomain” log |wc –l 查看端口占用20001,结果正确,测试成功。

如是转载,请指明原出处:http://blog.csdn.net/feitianxuxue,谢谢合作!

发表评论