libevent学习之网络通信】的更多相关文章

服务器端要实现网络通信,肯定会用到socket等函数,这几个函数应该没什么问题.libevent默认情况下是单线程的,可以配置成多线程,每个线程有一个event_base,对应一个struct event _base结构体以及一个事件管理器,调度托管给它的一系列事件.所以当一个事件发生后,先创建一个event_base,再创建一个事件,将这个事件绑定,然后添加到event_base中,启动event_base的循环,开始处理事件.大概流程如下: 1 参数解析:2. 创建socket连接:3. s…
Linux下编译参考源码中的README文件即可,这里主要记录Windows下的编译. 一.准备工作 去官网下载最新的稳定发布版本libevent-2.0.22-stable 官网地址:http://libevent.org/ 二.使用VS2012编译 1.解压libevent到C:\Users\zhang\Desktop\libevent-2.0.22-stable 2.打开“VS2012开发人员命令提示”工具,如下图所示. 3.输入指令开始编译,如下图所示. 有网友说编译之前应该在以下3个文…
目录 00. 目录 01. libevent简介 02. Libevent的好处 03. Libevent的安装和测试 04. Libevent成功案例 00. 目录 @ 01. libevent简介 什么是libevent ​ Libevent 是一个用C语言编写的.轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大:源代码相当精炼.易读:跨平台,支持 Windows. Linux. *BSD 和 M…
wangbin@2012,1,3 目录 Libevent在php中的应用学习 1.      Libevent介绍 2.      为什么要学习libevent 3.      Php libevent 扩展模块安装 4.      Libevent常量及php函数 5.      Select/poll模型 6.      epoll/kqueue模型 1. libevent介绍 libevent是一个事件触发的网络库,适用于windows.linux.freebsd等多种平台,内部使用sel…
转自:https://blog.csdn.net/majianfei1023/article/details/46485705 欢迎转载,转载请注明原文地址:http://blog.csdn.net/majianfei1023/article/details/46485705 一.libevent是什么libevent是一个轻量级的开源的高性能的事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.它被众多的开…
Libevent设计的精化之一在于把Timer事件.Signal事件和IO事件统一集成在一个Reactor中,以统一的方式去处理这三种不同的事件,更确切的说是把Timer事件和Signal事件融合到了IO多路复用机制中. Timer事件的融合相对清晰简单,其套用了Reactor和Proactor模式(如Windows上的IOCP)中处理Timer事件的经典方法,其实Libevent就是一个Reactor嘛.由于IO复用机制(如Linux下的select.epoll)允许使用一个最大等待时间(即最…
回想起之前自己用纯c手动写epoll循环,libevent用起来还真是很快捷啊!重写了之前学习的时候的一个例子,分别用纯c与libevent来实现.嗯,为了方便对比一下,就一个文件写到黑了. 纯c版: 一个server.c与client.c共同引用的头文件func.h #include<stdio.h> #include<string.h> #include<sys/types.h> #include<sys/stat.h> #include<fcnt…
libevent中提供了一个Hello-world.c 的例子,从这个例子可以学习libevent是如何使用bufferevent的. 这个例子在Sample中 这个例子之前讲解过,这次主要看下bufferevent的使用. 第一步找到main函数 main函数 int main(){ //...listener = evconnlistener_new_bind(base, listener_cb, (void *)base, LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_O…
Events have similar lifecycles. Once you call a Libevent function to set up an event and associate it with an event base, it becomes initialized. At this point, you can add, which makes it pending in the base. When the event is pending, if the condit…
今天開始学习Libevent . Libevent 是开源社区的一款高性能I/O框架库. 主要特点有: 1 跨平台. 2 统一事件源 3 线程安全 4 基于Reactor 今天主要进行了Libevent的安装,以及利用libevent框架编写一个间隔1s打印 Hello Libevent! 信息的程序. 首先是安装: 1 下载libevent源代码,下载地址http://libevent.org/.我下载的版本号是2.0 stable版本号.下载的文件格式是tar.gz包 2 进入刚下载得到的t…
学习: /Users/baidu/Documents/Data/Interview/服务器-检索端/libevent参考手册(中文版).pdf 讲的不好.翻译的..…
1. 信息隐藏:看*-internal.h文件 如bufferevent_private结构体在bufferevent_async.c中使用时: static inline struct bufferevent_async *upcast(struct bufferevent *bev); 2.函数指针: void (*free_context)(void *); 3.指针: #define offsetof(s, m)   (size_t)&(((s *)0)->m) s是一个结构名,它有…
用libevent写个定时器其实步骤不多: 1.初始化libevent 2.设置事件 3.添加事件 4.进入循环 由于定时事件触发之后,默认自动删除,所以如果要一直计时,则要在回调函数中重新添加定时事件. /// /// @file timer.cc /// @author marrs(chenchengxi993@gmail.com) /// @date 2017-10-18 21:14:38 /// #include <iostream> #include "event.h&qu…
网络通信 OSI 模型 - 定义了计算机互联的标准,是设计和描述计算机网络通信的基本框架 - 把网络通信的工作分为7层,分别是物理层.链路层(数据网络层).网络层.传输层.会话层.表示层和应用层 网络通信的三要素 - IP 地址 1.用来识别网络上一台独立的主机 2.IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络:主机号:用于识别网络中的主机) 3.特殊的IP地址:127.0.0.1(本地回环地址.保留地址.点分十进制)可用于简单的测试网卡是否故障:表示主机 - 端口号 1…
Bufferevents and evbuffers Every bufferevent has an input buffer and an output buffer. These are of type "struct evbuffer". When you have data to write on a bufferevent, you add it to the output buffer; when a bufferevent has data for you to rea…
Setting up a default event_base The event_base_new() function allocates and returns a new event base with the default settings. It examines the environment variables and returns a pointer to a new event_base. If there is an error, it returns NULL. Wh…
最近自学libevent事件驱动库,参考的资料为libevent2.2版本以及张亮提供的<Libevent源码深度剖析>, 参考资料: http://blog.csdn.net/sparkliang/article/details/4957667 libevent好处之类的就不赘述了,libevent和libiop,redis等一样都是采用事件回调机制,这种模式 被称作Reactor模式.正常事件处理流程是应用程序调用某个接口触发某个功能,而Reactor模式需要 我们将这些接口和宿主指针(谁…
libevent是一个开源的事件控制机制,如果不想陷入多进程或多线程的困扰,那么libevent将是很合适的工具. libevent提供了很多的API来管理和控制事件,可用于设计读.写.信号.定时等各种类型的事件处理,其使用主要有一下几个步骤:     1.首先需要初始化一个event_base结构体,它是libevent的入口,形如      struct event_base* base=event_init();     在新版本中推荐使用线程安全的   event_base_new()来…
1.evbuffer以队列的形式管理字节,从尾部添加,从头部取出(FIFO) 2.evbuffer内部存储形式是多个独立的连续内存       接口 //创建和删除 struct evbuffer *evbuffer_new(void);void evbuffer_free(struct evbuffer *buf);   //加锁解锁 //默认情况下是没有加锁的,多线程并发访问不安全 //第二个参数lock为空,则自动分配一个锁( 使用evthread_set_lock_creation_ca…
1. 每个bufferevent 都拥有类型为struct evbuffer的input buffer和out buffer,分别供数据读取和数据写入使用. 2.读取和写入数据是通过编写和设置对应的回调函数进行,而调用回调函数的时机则根据水位是否满足来的,水位又是可以设置的.默认情况下读的低水位是0,就是说libevent从底层读到大于0的数据到input buffer中,读回调函数就会调用,读回调函数读取input buffer的数据:同样默认的写水位也为0,就是说一旦output buffe…
  创建与释放 //backlog需要查询平台说明,在linux2.2以后 backlog就变成了已完成连接但未accept的队列的最大值(原来是处于syn状态的,现在换成sysctl 控制的参数tcp_max_syn_backlog)     struct evconnlistener *evconnlistener_new(struct event_base *base,    evconnlistener_cb cb, void *ptr, unsigned flags, int back…
1.一个event_base持有了一系列的事件,并监控和决定哪些事件需要激活, 2.每一个event_base背后都有一个支持其工作的方法(诸如select,poll,epoll,kquene...),默认情况会选择最快的方法,可以自定义设置 3.event_base可以被设置为lock状态,这样多个线程可以并发安全访问,但是其事件循环只能运行在一个线程当中.如果多个线程需要检查io事件,那么必须要每个线程一个event_base.     struct event_base *event_ba…
常见的异步IO存在的问题:   1.使用 fcntl(fd, F_SETFL, O_NONBLOCK);,为什么在处理上效率不好.       a.在没有数据可读写的时候,循环会不停执行,浪费掉大部分cpu     b.每次尝试读写文件描述符,都会执行一次内核调用(recv,write),而系统调用耗时.   2.使用select方式缺陷是什么?     a.如果检查的文件描述符太多,每次设置和检查的耗时就会长.   libevent的设计目标 1.可移植性 2.快速 3.易扩展 4.使用方便…
目录 00. 目录 01. 基本类型 1.1 evutil_socket_t类型 1.2 标准类型 1.3 各种兼容性类型 02. 可移植的定时器函数 03. 套接字API兼容性 04. 可移植的字符串函数 05. 区域无关的字符串操作函数 06. IPv6辅助和兼容性函数 07. 结构体可移植性函数 08. 安全随机数生成器 08. 参考 00. 目录 声明: 该博客来源于传智播客C++学院相关培训参考手册 头文件<event2/util.h> 定义了许多能够帮助我们利用libevent 实…
目录 00. 目录 01. 事件概述 02. 创建事件 03. 事件的标志 04. 事件持久性 05. 超时事件 06. 信号事件 07. 设置不使用堆分配的事件 08. 事件的未决和非未决 09. 事件的优先级 10. 检查事件状态 11. 一次触发事件 12. 手动激活事件 13. 优化公用超时 14. 从已清除的内存识别事件 15. 废弃的事件操作函数 04. 参考 00. 目录 声明: 该博客来源于传智播客C++学院相关培训参考手册 01. 事件概述 Libevents的基本操作单元是e…
目录 00. 目录 01. event_base_loop函数 02. event_base_dispatch函数 03. event_base_loopexit函数 04. event_base_loopbreak函数 05. event_base_got_exit函数 06. event_base_got_break函数 07. event_base_dump_events函数 08. event_base_dump_events函数 09. 废弃的事件循环函数 10.参考 00. 目录 声…
目录 00. 目录 01. 简介 02. 创建默认的event_base 03. 创建复杂的event_base 3.1 event_config_new函数 3.2 event_base_new_with_config函数 3.3 event_config_free函数 3.4 event_config_avoid_method函数 3.5 event_config_require_features函数 3.6 event_config_set_flag函数 3.7 event_config_…
基础类型   #ifdef WIN32 #define evutil_socket_t intptr_t #else #define evutil_socket_t int #endif ev_ssize_t   时间兼容函数   //前2个参数的计算结果放到第三个参数里面 #define evutil_timeradd(tvp, uvp, vvp) /* ... */ #define evutil_timersub(tvp, uvp, vvp) /* ... */   #define evut…
1.事件的分类 文件可写 文件可读 超时发生 信号发生 用户触发事件   2事件的生命周期        --非 persistent                                                                event_del(nopending)                                           在callback中通过event_add(重新pending)构成循环                    …
Runing the loop #define EVLOOP_ONCE             0x01 #define EVLOOP_NONBLOCK         0x02 #define EVLOOP_NO_EXIT_ON_EMPTY 0x04 int event_base_loop(struct event_base *base, int flags); int event_base_dispatch(struct event_base *base);     Stoping the…