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-03-11 22:33
⁄ 工业·编程
⁄ 共 1497字
Reactor模式是编写高性能网络服务器的必备技术之一,它具有如下的优点:
响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的;
编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/
进程的切换开销;
可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源;
可复用性, reactor 框架本身与具体事件处理逻辑无关,具有很高的复用性
下图描述了Reactor模式的框架,主要包...
Reactor, 设计模式阅读全文
2018-03-04 22:26
⁄ 工业·编程
⁄ 共 1507字
1、 同步阻塞IO(Blocking IO)
即传统的IO模型。当用户进程向系统发起read操作时,首先需要在内核中数据准备和内核态到用户进程的数据拷贝。当两个步骤都完成后,才会返回read结果状态,才能执行后续的数据处理操作。
{
read(socket, buffer);
process(buffer);
}
2、 同步非阻塞IO(Non-blocking IO)
默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。当用户进程向...
IO阅读全文
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-16 19:10
⁄ 工业·编程
⁄ 共 833字
1.ubuntun14.04下安装cgdb
cong@msi:~$ sudo apt-get install cgdb
2. 使用: cgdb ./hello就可以了
a. cgdb分为上面的vi窗口与下面的gdb窗口
ESC-->切到vi窗口
i -->切到gdb窗口
- -->减小vi窗口
= -->增大vi窗口
shift - -->减小很多vi窗口
shift = -->增大很多vi窗口
b.断点
空格添加/删除断点
c. gdbinit脚本不能用
warning: File "/work/ffmpeg/jpeg/jpegc/.gdbinit" auto-loading has...
cgdb, GDB阅读全文
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阅读全文
2018-02-04 20:30
⁄ 工业·编程
⁄ 共 656字
最近在编写libevent项目时,启动命令后:提示error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory
如果缺少的是其他库,该方法依然适用,现以libevent-2.1.so.6为例
首先,我们需要查看该库是否存在:
find / -name libevent-2.1.so.6
添加环境变量的方法,添加 export LD_LIBRARY_PATH=XXX(此为find命令中查找到的库路径)
export LD_LIBRARY_PATH=/usr/l...
编程, 解决方案阅读全文