`
iunknown
  • 浏览: 409538 次
社区版块
存档分类
最新评论

libevent 注解

阅读更多
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 的代码去掉错误处理之后的大概流程如下
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
分享到:
评论

相关推荐

    libevent 注释

    **libevent 深度解析** libevent 是一个开源、跨平台的事件通知库,它允许程序员编写高性能、异步的网络服务器和客户端程序。在本文中,我们将深入探讨 libevent 的核心概念、功能特性、使用场景以及如何进行实际...

    libevent注释版

    这个“libevent注释版”应该是对原始libevent源码进行了解释和注解,方便开发者更好地理解和使用这个库。 **一、Libevent基本概念** 1. **事件模型**:Libevent提供了基于文件描述符(FD)的事件驱动模型,它支持...

    libevent源代码, 其中代码中包含注解

    这个压缩包文件包含的是libevent 1.4.14b版本的源代码,其中的注解对于理解和学习该库的功能和工作原理至关重要。 首先,让我们深入了解一下Libevent的核心概念。Libevent的核心是事件基础架构,它提供了基于文件...

    libevent源代码(包含中文注释)

    其中,libevent-1.4.9-stable.zip版本带有中文注释,对于中国开发者来说,理解源码会更加方便。而libevent-1.4.12-stable是另一个稳定版本,可能是例子或教程中推荐使用的版本。 Libevent 的核心功能是提供了一种...

    libevent源码分析

    libevent是著名的开源网络库,被广泛应用于高性能网络服务器的开发,其主要目标是封装底层的网络调用,提供简洁易用的接口给开发人员。libevent库支持多平台,具有良好的跨平台特性,其设计目标是通过事件驱动的方式...

    libevent网络库

    如果包含的是 `libevent 注释版`,那么这个版本的库应该有更详尽的注释,帮助开发者理解内部实现和接口。 总的来说,Libevent 是一个强大的工具,可以帮助开发者编写出高效率、低延迟的网络程序。通过使用事件驱动...

    libevent1.4.8 chm文档

    综上所述,libevent1.4.8 chm文档是由Doxygen工具从源代码注释中生成的,包含了libevent库的详细使用说明和API参考,为开发者提供了丰富的参考资料。而libevent本身是一个强大的事件驱动网络库,广泛应用于构建高...

    libevent-main_master.zip

    # libevent commented libevent中文注释以及部分示例代码 libevent-1.4.15源码阅读注释版 libevent_server-master libevent-0.1

    libevent-1.4.12-stable-注释版

    注释了libevent中很关键的部分,很重要的接口函数。

    libevent-comment:libevent-1.4.15源码阅读注释

    《libevent-1.4.15源码阅读注释》是针对libevent库的一个详细解析,这个开源项目为系统编程提供了强大的事件通知机制。libevent是一个轻量级的库,它允许程序员以统一的方式处理各种事件,如网络连接、定时器以及...

    libevent-note:对libevent网络库进行原始码阅读和添加中文注释

    Libevent原始码阅读和添加中文注释,有些地方没有改中文因为还是英文的意思好理解 目录结构 // libevent 2.1.12 // * 代表核心源码 . ├── README.md ├── arc4random.c ├── buffer.c // buffer * .c 缓冲区...

    libevent:配合网上教程阅读libevent原始档案,取代原始档案进行注释

    在本篇文章中,我们将深入探讨libevent的核心概念,如何使用它来构建高性能的网络应用,以及如何结合网上的教程对原始代码进行学习和注释,以加深理解。 首先,libevent的核心功能是事件驱动编程,它通过提供一个...

    Red Hat Enterprise server 5 上安装 memcached

    - 修复这个问题,需要手动编辑`memcache.c`文件,取消第57行和59行的注释,或者直接定义`IOV_MAX`。 4. **解决运行时的库文件路径问题**: - 当尝试启动memcached时,可能会提示找不到libevent库。这是因为默认的...

    libeventlearn:学习libevent的代码。发表自己的注释简单翻译源代码的大部分注释

    I / O框架库概述 React堆模式 句柄(Handler)由于统一了事件源,一个事件一般跟一个句柄绑定在一起,事件马上之后会通过句柄通知这一个事件。在Linux中I / O事件对应的句柄-&gt;文件较小,信号事件-&gt;信号值 ...

    FastDFS安装手册

    - 解除`#include http.conf`的注释。 - 调整`reserved_storage_space`为`1GB`。 - 启动TrackerServer:`/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf`。 #### 四、FastDFS Storage安装与配置 1. **...

    decode-memcached:memcached原始码剖析注释

    memcached原始码阅读笔记阅读memcached最好有libevent基础,memcached是基于libevent构建起来的。通由libevent提供的事件驱动机制触发memcached中的IO事件。已经有大牛剖析过libevent源码了,推荐阅读:个人认为,...

    AnnotatedCode:知名开源代码库的注释版本:C ++,Golang等

    C / C ++项目名称关键词注释版原地址博客力宝协程协程协程libevent网络库/React器暂无沙发-pbrpc RPC暂无木多网络库/React器雷迪斯雷迪斯高朗项目名称关键词注释版原地址博客go / x / time / rate限流器限速限流器组...

    C++做的练习小项目合集带注释

    - 多线程或异步处理:处理大量并发请求,可能涉及到了事件驱动模型如libevent或boost.asio。 5. **leveldb**: - 数据库系统:学习开源的嵌入式数据库引擎,理解B-Tree或LSM-Tree等数据结构。 - 键值存储:如何...

    memcache1.2.8源码分析(源码有注释+ppt说明)

    源码中包含对libevent接口的调用,用于监听连接、接收数据和发送响应。 7. **分布式** 虽然memcache本身不支持分布式,但可以在客户端层面实现。源码分析有助于理解如何通过一致性哈希等算法实现数据的分布式存储...

Global site tag (gtag.js) - Google Analytics