原创作者: iunknown
阅读:3702次
评论:0条
更新时间:2011-05-26
libevent - an event notification library
http://www.monkey.org/~provos/libevent/
http://www.monkey.org/~provos/libevent/event3.html
《unix网络编程》 (第二版,中文版)
27.4 TCP 迭代服务器程序
6.8 TCP 回射服务器程序(修订版)
6.11 TCP 回射服务器程序(再修订版)
Page 141 的代码去掉错误处理之后的大概流程如下
Page 148 的代码去掉错误处理之后的大概流程如下
对比上面的两段程序,基本的结构非常相似。
libevent 的工作就是把这个结构封装了起来,包括以下几个方面
1.主循环结构
2.封装了底层不同的 IO 复用机制,比如 select,poll,epoll,等
3.由于系统默认的 TCP timeout 时间比较长(典型的是 2 小时),为了尽量避免服务器受到 DOS 攻击,需要在应用层建立适当的 timeout 机制。上面的代码中并没有实现这个机制,但是在 libevent 也包含了 timeout 机制。
使用了 libevent 之后,使得开发人员可以从上面的问题中解脱出来,从而专注于和业务相关的代码。
一个更方便使用的,基于 libevent 的半同步半异步服务器框架:http://iunknown.iteye.com/blog/59804
http://www.monkey.org/~provos/libevent/
http://www.monkey.org/~provos/libevent/event3.html
《unix网络编程》 (第二版,中文版)
27.4 TCP 迭代服务器程序
6.8 TCP 回射服务器程序(修订版)
6.11 TCP 回射服务器程序(再修订版)
Page 141 的代码去掉错误处理之后的大概流程如下
for( ; ; ) { nready = select( maxfd + 1, &rset, NULL, NULL, NULL ); for( i = 0; i <= maxi; i++ ) { sockfd = client[i]; if( FD_ISSET( sockfd, &rset ) ) { n = read( sockfd, line, MAXLINE ); write( sockfd, line, n ); if( --nready <= 0 ) break; } } }
Page 148 的代码去掉错误处理之后的大概流程如下
for( ; ; ) { nready = poll( client, maxi + 1, INFTIM ); for( i = 1; i <= maxi; i++ ) { sockfd = client[i].fd; if( client[i].revents & POLLRDNORM ) { n = read( sockfd , line, MAXLINE ); write( sockfd, line, n ); if( --nready <= 0 ) break; } } }
对比上面的两段程序,基本的结构非常相似。
libevent 的工作就是把这个结构封装了起来,包括以下几个方面
1.主循环结构
2.封装了底层不同的 IO 复用机制,比如 select,poll,epoll,等
3.由于系统默认的 TCP timeout 时间比较长(典型的是 2 小时),为了尽量避免服务器受到 DOS 攻击,需要在应用层建立适当的 timeout 机制。上面的代码中并没有实现这个机制,但是在 libevent 也包含了 timeout 机制。
使用了 libevent 之后,使得开发人员可以从上面的问题中解脱出来,从而专注于和业务相关的代码。
一个更方便使用的,基于 libevent 的半同步半异步服务器框架:http://iunknown.iteye.com/blog/59804
评论 共 0 条 请登录后发表评论