现在位置: 首页 > 自动控制 > 文章
2018-04-22 20:31 工业·编程 ⁄ 共 2266字 暂无评论
DPI 全称为“Deep Packet Inspection”,称为“深度包检测”。所谓“深度”是和普通的报文分析层次相比较而言的,“普通报文检测”仅分析IP包的层4 以下的内容,包括源地址、目的地址、源端口、目的端口以及协议类型,而DPI 除了对前面的层次分析外,还增加了应用层分析,识别各种应用及其内容。 DPI技术原理 DPI 的技术关键是高效的识别出网络上的各种应用。 普通报文检测是通过端口号来识别应用类型的。如检测到端口号为80时,则...
阅读全文
2018-04-15 20:24 工业·编程 ⁄ 共 3130字 暂无评论
深度数据包检测(Deep packet inspection,缩写为 DPI)是一种特殊的网络技术,一般网络设备只会查看以太网头部、IP头部而不会分析TCP/UDP里面的内容这种被称为浅数据包检测;与之对应的DPI会检查TCP/UDP里面的内容,所以称为深度数据包检测。 DPI一般是一个硬件或者软件,一般用“旁挂”的方式接入到网络。它会对网络中的每个数据包进行检查,识别出应用层协议,根据识别的协议采取一定的措施(比如记录HTTP访问行为)。对于TCP协议它...
阅读全文
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-03-11 22:33 工业·编程 ⁄ 共 1497字 暂无评论
Reactor模式是编写高性能网络服务器的必备技术之一,它具有如下的优点: 响应快,不必为单个同步时间所阻塞,虽然 Reactor 本身依然是同步的; 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/ 进程的切换开销; 可扩展性,可以方便的通过增加 Reactor 实例个数来充分利用 CPU 资源; 可复用性, 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。当用户进程向...
阅读全文
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语言程序员(咳,我还是个菜),要在创建的同时考虑资源释放的问...
阅读全文