现在位置: 首页 > libevent
今天分享一个网络库选择的文章,当时我负责公司服务器的改造工作,需要选择一个适合的开源网络库。 欲使用开源网络库libevent、libev、libuv、IOCP、asio、muduo中的一个,经过对比分析,因本服务器系统目前于windows下运行,考虑到未来跨平台的支持,最终选定libevent开源网络库。 技术对比: 1.libevent C语言跨平台,应用最广泛,历史悠久的跨平台事件库。这是一个用纯C写的开源库,属于一个轻量级的网络中间件。其中用到的...
阅读全文
2019-01-18 22:39 工业·编程 ⁄ 共 1140字 暂无评论
[问]两个库都是为异步io调度而设计,在Linux上都是使用epoll机制,在FreeBSD上则都是kqueue,还有诸如此类的很多相通之处。 除了这些表面上的差别外,其实这两者根本的区别在哪里呢?比如架构上,或者设计哲学上。 [答]就设计哲学来说,libev的诞生,是为了修复libevent设计上的一些错误决策。例如,全局变量的使用,让libevent很难在多线程环境中使用。watcher结构体很大,因为它们包含了I/O,定时器和信号处理器。额外的组件...
阅读全文
2019-01-16 22:37 工业·编程 ⁄ 共 634字 暂无评论
Libevent、libev、libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library)。 异步事件库本质上是提供异步事件通知(Asynchronous Event Notification,AEN)的。异步事件通知机制就是根据发生的事件,调用相应的回调函数进行处理。 事件(Event):事件是异步事件通知机制的核心,比如fd事件、超时事件、信号事件、定时器事件。有时候也称事件为事件处理器(EventHandler),这个名称更形象,因为Handler本身...
阅读全文
2018-04-08 23:04 工业·编程 ⁄ 共 4585字 暂无评论
libevent将IO事件、信号事件和定时器事件很好的结合在一起,采用了统一的事件源方式,即把信号事件也转换成IO事件,然后采用同一套IO复用机制去监听。 libevent的事件循环通过event_base_loop完成,另外一个事件循环函数是event_base_dispatch,其功能上即为没有设置标志的 event_base_loop(base, 0)。即event_base_dispatch()将一直运行,直到没有已经注册的事件了,或者调用了event_base_loopbreak()或者event_base_loo...
阅读全文
2018-04-01 23:00 工业·编程 ⁄ 共 10017字 暂无评论
    libevent中基于Reactor模式的事件处理框架对应event_base,在event在完成创建后,需要向event_base注册事件,监控事件的当前状态,当事件状态为激活状(EV_ACTIVE)时,调用回调函数执行。     本文主要从以下几方面进行分析:event_base的结构,event_base的创建,事件的注册、事件分发、事件注销 event_base结构 struct event_base {   //指定某个eventop结构体,它决定了该event_base...
阅读全文
2018-03-25 22:47 工业·编程 ⁄ 共 1546字 暂无评论
1 . 创建事件 (event_new) 主要完成event的空间分配, struct event * event_new(struct event_base *base,                         evutil_socket_t fd,                        ...
阅读全文
2018-03-18 22:40 工业·编程 ⁄ 共 2324字 暂无评论
// include/event2/event_struct.h struct event {     TAILQ_ENTRY(event) ev_active_next; // 已就绪的事件链表     TAILQ_ENTRY(event) ev_next; // 已注册的事件链表     /* for managing timeouts */     union {         TAILQ_ENTRY(event) ev_next_with_common_timeout;         ...
阅读全文
2018-02-25 22:12 工业·编程 ⁄ 共 812字 暂无评论
evutil:用于抽象不同平台网络实现差异的通用功能。 event和event_base: libevent的核心,为各种平台特定的、基于事件的非阻塞 IO后 端提供抽象API, 让程序可以知道套接字何时已经准备好, 可以读或者写, 并且处理基 本的超时功能,检测OS信号。 bufferevent: 为libevent基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外, 还让程序可以请求缓冲的读写操作, 可以知道何时IO已经真正发生。( buf...
阅读全文
我们可以把libevent项目想象为造火箭的过程,我们都只是螺丝工,那么造火箭需要做什么? 1. 拿出火箭壳(创建框架) 2. 造螺丝 (创建事件) 3. 拧螺丝 (添加事件) 4. 造火箭(事件循环) 一:掏出火箭壳 —>event_base()创建与释放 我们开始第一步:创建一个event_base // 创建event_base struct event_base* event_base_new(void) 当然,作为一个优秀的c语言程序员(咳,我还是个菜),要在创建的同时考虑资源释放的问...
阅读全文
2018-02-11 20:35 工业·编程 ⁄ 共 440字 暂无评论
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。 只要是学习编程似乎都逃离不了“hello word”定律! 编...
阅读全文