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 的代码去掉错误处理之后的大概流程如下
[code]
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;
}
}
}
[/code]
Page 148 的代码去掉错误处理之后的大概流程如下
[code]
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;
}
}
}
[/code]
对比上面的两段程序,基本的结构非常相似。
libevent 的工作就是把这个结构封装了起来,包括以下几个方面
1.主循环结构
2.封装了底层不同的 IO 复用机制,比如 select,poll,epoll,等
3.由于系统默认的 TCP timeout 时间比较长(典型的是 2 小时),为了尽量避免服务器受到 DOS 攻击,需要在应用层建立适当的 timeout 机制。上面的代码中并没有实现这个机制,但是在 libevent 也包含了 timeout 机制。
使用了 libevent 之后,使得开发人员可以从上面的问题中解脱出来,从而专注于和业务相关的代码。
[b]一个更方便使用的,基于 libevent 的半同步半异步服务器框架:[/b][url]http://iunknown.iteye.com/blog/59804[/url]
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 的代码去掉错误处理之后的大概流程如下
[code]
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;
}
}
}
[/code]
Page 148 的代码去掉错误处理之后的大概流程如下
[code]
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;
}
}
}
[/code]
对比上面的两段程序,基本的结构非常相似。
libevent 的工作就是把这个结构封装了起来,包括以下几个方面
1.主循环结构
2.封装了底层不同的 IO 复用机制,比如 select,poll,epoll,等
3.由于系统默认的 TCP timeout 时间比较长(典型的是 2 小时),为了尽量避免服务器受到 DOS 攻击,需要在应用层建立适当的 timeout 机制。上面的代码中并没有实现这个机制,但是在 libevent 也包含了 timeout 机制。
使用了 libevent 之后,使得开发人员可以从上面的问题中解脱出来,从而专注于和业务相关的代码。
[b]一个更方便使用的,基于 libevent 的半同步半异步服务器框架:[/b][url]http://iunknown.iteye.com/blog/59804[/url]