2019-01-22 22:47
⁄ 工业·编程
⁄ 共 1293字
今天分享一个网络库选择的文章,当时我负责公司服务器的改造工作,需要选择一个适合的开源网络库。
欲使用开源网络库libevent、libev、libuv、IOCP、asio、muduo中的一个,经过对比分析,因本服务器系统目前于windows下运行,考虑到未来跨平台的支持,最终选定libevent开源网络库。
技术对比:
1.libevent
C语言跨平台,应用最广泛,历史悠久的跨平台事件库。这是一个用纯C写的开源库,属于一个轻量级的网络中间件。其中用到的...
libev, libevent, libuv, 网络编程阅读全文
2019-01-18 22:39
⁄ 工业·编程
⁄ 共 1140字
[问]两个库都是为异步io调度而设计,在Linux上都是使用epoll机制,在FreeBSD上则都是kqueue,还有诸如此类的很多相通之处。
除了这些表面上的差别外,其实这两者根本的区别在哪里呢?比如架构上,或者设计哲学上。
[答]就设计哲学来说,libev的诞生,是为了修复libevent设计上的一些错误决策。例如,全局变量的使用,让libevent很难在多线程环境中使用。watcher结构体很大,因为它们包含了I/O,定时器和信号处理器。额外的组件...
libev, libevent, 网络编程阅读全文
2019-01-16 22:37
⁄ 工业·编程
⁄ 共 634字
Libevent、libev、libuv三个网络库,都是c语言实现的异步事件库Asynchronousevent library)。
异步事件库本质上是提供异步事件通知(Asynchronous Event Notification,AEN)的。异步事件通知机制就是根据发生的事件,调用相应的回调函数进行处理。
事件(Event):事件是异步事件通知机制的核心,比如fd事件、超时事件、信号事件、定时器事件。有时候也称事件为事件处理器(EventHandler),这个名称更形象,因为Handler本身...
libev, libevent, 网络编程阅读全文
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...
libevent阅读全文
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...
libevent阅读全文
2018-03-25 22:47
⁄ 工业·编程
⁄ 共 1546字
1 . 创建事件 (event_new)
主要完成event的空间分配,
struct event * event_new(struct event_base *base,
evutil_socket_t fd,
...
libevent阅读全文
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;
...
libevent阅读全文
2018-02-25 22:12
⁄ 工业·编程
⁄ 共 812字
evutil:用于抽象不同平台网络实现差异的通用功能。
event和event_base: libevent的核心,为各种平台特定的、基于事件的非阻塞 IO后
端提供抽象API, 让程序可以知道套接字何时已经准备好, 可以读或者写, 并且处理基
本的超时功能,检测OS信号。
bufferevent: 为libevent基于事件的核心提供使用更方便的封装。除了通知程序套接字已经准备好读写之外, 还让程序可以请求缓冲的读写操作, 可以知道何时IO已经真正发生。( buf...
libevent, 源码阅读全文
2018-02-18 22:02
⁄ 工业·编程
⁄ 共 4620字
我们可以把libevent项目想象为造火箭的过程,我们都只是螺丝工,那么造火箭需要做什么?
1. 拿出火箭壳(创建框架)
2. 造螺丝 (创建事件)
3. 拧螺丝 (添加事件)
4. 造火箭(事件循环)
一:掏出火箭壳 —>event_base()创建与释放
我们开始第一步:创建一个event_base
// 创建event_base
struct event_base* event_base_new(void)
当然,作为一个优秀的c语言程序员(咳,我还是个菜),要在创建的同时考虑资源释放的问...
libevent阅读全文
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”定律!
编...
libevent阅读全文