资讯专栏INFORMATION COLUMN

关于libevent的事件持续化EV_READ | EV_PERSIST

happyfish / 1048人阅读

摘要:如果一个事件被设置了,那么这个事件就是持续化的,意思就是这个事件会保持挂起状态,即使回调函数被执行。任何时候事件的回调函数触发都会重置持续化事件中的超时状态。

关于事件的可持续化

从网上找的内容,可以看下github中的一本book,点击下面的连接就ok了。
github-libevent_book引用其中的话

About Event Persistence
By default, whenever a pending event becomes active (because its fd is ready to read or write, or because its timeout expires), it becomes non-pending right before its callback is executed. Thus, if you want to make the event pending again, you can call event_add() on it again from inside the callback function.
If the EV_PERSIST flag is set on an event, however, the event is persistent. This means that event remains pending even when its callback is activated. If you want to make it non-pending from within its callback, you can call event_del() on it.
The timeout on a persistent event resets whenever the event’s callback runs. Thus, if you have an event with flags EV_READ|EV_PERSIST and a timeout of five seconds, the event will become active:

Whenever the socket is ready for reading.

Whenever five seconds have passed since the event last became active.

翻译

可能有不对的地方,欢迎指正

关于事件的持续化
默认情况下,任何时候一个挂起的事件被激活(因为他的fd准备好了读或者写,或者因为他的超时过期了),它会在回调函数执行之前变为非挂起。如果你想让事件再次挂起,你需要在回调函数内部调用event_add()
如果一个事件被设置了EV_PERSIST,那么这个事件就是持续化的,意思就是这个事件会保持挂起状态,即使回调函数被执行。如果你想让它变为非挂起状态,可以在回调函数中调用event_del()

任何时候事件的回调函数触发都会重置持续化事件中的超时状态。因此,如果的事件有EV_READ/EV_PERSIST并且设置了5秒超时,那么有两种情况会触发这个事件:

当socket可以进行读取的时候

当5s超时到期的时候

给个例子:
           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22027.html

相关文章

  • Linux下libevent基础安装和安装错误解决方案以及使用

    摘要:关于库是一个轻量级的开源高性能网络库,有几个显著的亮点事件驱动,高性能轻量级,专注于网络,不如那么臃肿庞大源代码相当精炼易读跨平台,支持和支持多种多路复用技术,和等支持,定时器和信号等事件注册事件优先级已经被广泛的应用,作为底层的网络库比 关于libevent库 Libevent 是一个轻量级的开源高性能网络库,有几个显著的亮点: 事件驱动(event-driven),高性能; 轻量...

    Java_oldboy 评论0 收藏0
  • 一次读懂 Select、Poll、Epoll IO复用技术

    摘要:目前的常用的复用模型有三种,,。如果设置为,则将一直阻塞到有套接字满足条件。模型是和的增强版,同一样,文件描述符数量无限制。支持多种多路复用技术,和等。同时为文件描述符信号超时设定等事件提供了监听回调。 阅读本文大概需要 6 分钟。 我们之前采用的多进程方式实现的服务器端,一次创建多个工作子进程来给客户端提供服务。其实这种方式是存在问题的。 可以打个比方:如果我们先前创建的几个进程承...

    int64 评论0 收藏0
  • 一次读懂 Select、Poll、Epoll IO复用技术

    摘要:目前的常用的复用模型有三种,,。如果设置为,则将一直阻塞到有套接字满足条件。模型是和的增强版,同一样,文件描述符数量无限制。支持多种多路复用技术,和等。同时为文件描述符信号超时设定等事件提供了监听回调。 阅读本文大概需要 6 分钟。 我们之前采用的多进程方式实现的服务器端,一次创建多个工作子进程来给客户端提供服务。其实这种方式是存在问题的。 可以打个比方:如果我们先前创建的几个进程承...

    lsxiao 评论0 收藏0
  • Libev 官方文档学习笔记 - 02:watcher 基础

    摘要:回调可在这两个中开始停止相应的。即将被销毁已经被异步通知不是发送的信号。此外还需要调用相应的函数。停止,并清空状态。当且仅当时返回。系列篇官方文档学习笔记概述和官方文档学习笔记基础本文官方文档学习笔记常用接口使用构建响应服务器的简单流程 请注意这是 libev 而不是 libevent 的文章! 这篇文章是第二篇,主要讲 libev 里的 watcher 的一些基础操作。 本文地址:h...

    yimo 评论0 收藏0
  • 使用 libev 构建 TCP 响应服务器(echo server)简单流程

    摘要:事件同理准备用来的读取的方法就视乎程序员的实现啦把数据回去原文例子使用的就是,实际上我个人偏爱的是启动这里可以直接使用系列篇官方文档学习笔记概述和官方文档学习笔记基础官方文档学习笔记常用接口使用构建响应服务器的简单流程本文 请注意这是 libev 而不是 libevent 的文章!这篇文章主要是使用具体的例子,说明如何使用 libev。网上不少文章都是照抄示例,一点用都没有……本文将示...

    ymyang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<