2021年9月

Libevent 的 evbuffer 功能实现了一个字节队列,针对将数据添加到末尾和从前面删除数据进行了优化。

Evbuffers 通常用于执行缓冲网络 IO 的“缓冲”部分。它们不提供调度 IO 或在 IO 准备好时触发 IO 的功能:这是 bufferevents 所做的功能。

- 阅读剩余部分 -

这一章节讲述一些bufferevent的高级特性,对初学者来说并不是必须的。如果你刚刚学习如何使用bufferevent,可以跳过本章节。

成对的bufferevent

有时,你需要编写一个与自己通信的网络程序。例如,您可以编写一个程序来通过某个协议建立隧道用户连接,而该程序有时也希望通过该协议建立自己的连接隧道。当然,您可以通过打开与您自己的侦听端口的连接并让您的程序使用自己来实现这一点,但是,让您的程序通过网络堆栈与自己对话会浪费资源。

相反,您可以创建一对成对的bufferevent,以便写入一个的所有字节都被另一个接收(反之亦然),但不使用socket。

- 阅读剩余部分 -

大多数时候,除了响应事件之外,应用程序还希望执行一些数据缓冲。例如,当我们想要写入数据时,通常的模式运行如下:

  • 决定我们要向连接写入一些数据;将该数据放入缓冲区。
  • 等待连接变为可写
  • 尽可能多地写入数据
  • 记住我们写了多少,如果我们还有更多的数据要写,等待连接再次变为可写。

- 阅读剩余部分 -

事件

event是libevent的基本操作单元,每一个event代表一系列条件的集合,包括:

  • 一个文件描述符准备好了读、写
  • 一个文件描述符准备好了读、写(仅限于边缘触发)
  • 超时到期
  • 发生了信号
  • 用户触发的事件

- 阅读剩余部分 -