当前位置: 首页 > wzjs >正文

pc网站转换成wapwordpress如何设置成伪静态页面

pc网站转换成wap,wordpress如何设置成伪静态页面,aso关键词覆盖优化,百度收录网站链接入口libevent 事件处理框架 - event_base API 函数 在 event_base 底层封装了 IO 多路转接函数, 并且可以对事件进行检测和处理的 // 头文件 #include <event2/event.h> // 创建一个时间处理框架 struct event_base * event_base_new(void); // 释放一个事件处理框架 // 参数…

libevent

事件处理框架 - event_base

  • API 函数

    在 event_base 底层封装了 IO 多路转接函数, 并且可以对事件进行检测和处理的

// 头文件
#include <event2/event.h>
// 创建一个时间处理框架
struct event_base * event_base_new(void);
// 释放一个事件处理框架
// 参数: even_base_new() 函数的返回值
void event_base_free(struct event_base * base);// 查看底层支持的 IO 转接模型
const char ** event_get_supported_methods(void);
// 当前使用的 IO 转接模型
const char * event_base_get_method(const struct event_base * base);

事件循环

// 头文件
#include <event2/event.h>
// 启动事件处理框架中的事件循环
// 参数: event_base_new() 返回值
/*事件检测过程中的特点:举例: 检测读事件:- 如果对方没有发送数据, 会一直检测直到触发- 加你测到有读事件, 默认只会处理一次, 事件循环就终止了, 只能接受一次数据- 要持续的接收数据, 需要额外设置 
*/
// 这个函数被调用, 内部会进行事件检测, 代码阻塞在这一行
// 条件满足, 检测就停止了, 应用程序就结束了
int intevent_base_dispath(struct event_base* base);
  • 终止事件循环
// 表示一个时间间隔
struct timeval
{long tv_sec;long tv_usec;
}
// 假设事件循环正在继续, 并且正在处理一个有效的事件, 调用这个函数不会马上终止, 在 tv 指定的时长之后, 事件就终止了
int event_base_loopexit(struct event_base * base, const struct timeval * tv)
参数:- base: 事件处理框架- tv: 在指定时间段之后, 退出事件循环
// 马上终止循环
int event_base_loopbreak(struct event_base * base);

事件

  • 事件的创建和释放

    // 事件处理函数, 被 libevent 框架调用, 实参的指定不是程序员做的
    // 程序员可以直接使用回调函数的参数 ==> 需要知道参数的意义
    typedef void (* event_callback_fn)(evutil_socket_t fd, short what, void * arg);
    参数:- fd: 文件描述符,event_new() 第二个参数- what: 记录了实际文件描述符触发的事件- arg: event_new() 的最后一个参数// 本质是对一个文件描述符进行封装
    // 事件被创建之后, 不能被事件处理框架直接检测
    struct event_base * event_new(struct event_base * base, evutil_socker_t fd,short what, event_callback_fn cb, void * arg)
    参数:- base: 事件处理框架- fd: 文件描述符, 比如管道的或者套接字的- what: 要检测的事件, 检测第二个参数 fd 的事件- EV_READ: 读事件- EV_WRITE: 写事件- EV_PERSIST: 设置事件重复检测- EV_SIGNAL: 信号事件(linux)- EV_ET: 设置边沿模式- cb: 回调函数, 当检测的事件被触发, 这个函数就被调用- arg: 作为实参传递给 cd
    
  • 事件的添加和删除

    struct timeval {}
    // 事件被创建之后, 不能被事件处理框架直接检测, 需要做添加处理
    int event_add(struct event * ev, const struct timeval * tv)
    参数:- ev: 通过 event_new() 创建得到的事件- tv: 超时时长, 不用就传 NULL- 检测了一个时间, 并且在 tv 指定的时间段中没有被处罚, 这个事件对应的回调函数会被强制调用- 如果指定为 NULL, 事件不触发, 对应的回调函数就不被调用
    int event_del(struct event * ev);(不常用)
    参数:- ev: 通过 event_new() 创建得到的事件
    

带缓冲区的事件

使用场景: 网络套接字通信

事件处理框架对 bufferevent 的处理方式:

  • 不需要调用函数将其添加到事件处理框架上, 没有对应的 add 函数
  • bufferevent 对应的事件在事件处理框架上默认是持续检测的
/*
带缓冲区的事件, 名字: bufferevent, 也是一个结构体
带缓冲区的事件结构:1. 封装了 socket 中的通信的文件描述符 -> int -> 得到了 bufferevent2. 和原来的区别:默认的通信的文件描述符:1. 在内核中对应两块内存, 读缓冲区, 写缓冲区struct bufferevent 对内核的两块内存进行了封装1. 使用者不能直接操作内核中的读写缓冲区2. 在 bufferevent 中又额外提供了两块缓冲区- 读 -> 内核中的读缓冲区- 自动将内核读缓冲区中的数据放到 bufferevent 的读缓冲区- 使用者只需要从 bufferevent 读缓冲区中读数据即可- 写 -> 内核中的写缓冲区- 要发送数据, 将数据写入 bufferevent 写缓冲区中即可3. 读写缓冲区分别对应读写事件- 当读事件被触发, 读缓冲区对应的回调函数被调用- 在回调函数中读数据(接收数据)- 当写事件被触发, 写缓冲区对应的回调函数被调用- 写缓冲区的数据被写到内核中了(没有什么卵用)*/
  • 创建/释放基于套接字的 buffevent

    // 创建带缓冲区的事件, 起始对通信的套接字进行封装
    struct bufferevent * bufferevent_socket_new(struct event_base * base,evutil_socket_t fd,enum bufferevent_options options
    )
    参数:- base: 事件处理框架- fd: 通信的文件描述符- 自己创建通信的文件描述符, 通过函数: socket();- 自动初始化: -1- opentions: - BUV_OPT_CLOSE_ON_FREE: 在销毁这个对象的时候, 自动释放封装的文件描述符// 释放带缓冲区的事件
    void bufferevent_free(struct bufferevent * bev);
    
  • 在 bufferevent 上启动连接

    // 连接服务器端的程序, 类似于 connect() 函数
    int bufferevent_socket_connect(struct bufferevent * bev,struct sockaddr * address,int addrlen
    );
    参数:- bev: 带缓冲区的事件, 通过 bufferevent_socket_new() 得到的- address: 需要在这里初始化服务器端的 IP 和端口信息- addlen: address 参数执行的内存大小
    
  • 操作 bufferevent 中的数据

    // 数据发送, 其实数据通过这个函数写入 bufferevent 的写缓冲区中
    int bufferevent_write(struct bufferevent * bufev, const void * data, size_t size);
    参数:- bufev: bufferevent_socket_new() 得到的返回值, 封装了通信的文件描述符- data: 要发送的数据- size: data 的长度
    返回值:- > 0: 成功- -1: 失败
    // 数据接收, 其实数据通过这个函数从 bufferevent 的读缓冲区中读出的
    int bufferevent_read(struct bufferevent * bufev, void * data, size_t size);
    参数:- bufev: bufferevent_socket_new() 得到的返回值, 封装了通信的文件描述符- data: 存储数据的内存- size: data 的大小
    

文章转载自:

http://ap1RNLRK.jqjnx.cn
http://9i02Usbb.jqjnx.cn
http://9pUUVM7H.jqjnx.cn
http://kkjq7ZJr.jqjnx.cn
http://2C86sPMx.jqjnx.cn
http://6eZ1gHdk.jqjnx.cn
http://lkjLscWV.jqjnx.cn
http://MU5H22Nv.jqjnx.cn
http://MVYxaCZd.jqjnx.cn
http://S2tYKYut.jqjnx.cn
http://rjDFvhxJ.jqjnx.cn
http://PEwQhoUy.jqjnx.cn
http://2WDdKDkv.jqjnx.cn
http://FRE7d5jC.jqjnx.cn
http://9H5BYOLL.jqjnx.cn
http://UfgJBeY7.jqjnx.cn
http://0ouRASg0.jqjnx.cn
http://zzwlokye.jqjnx.cn
http://WQHg0IoB.jqjnx.cn
http://JmFtqCQP.jqjnx.cn
http://QbFeeVvq.jqjnx.cn
http://vDOWK2UT.jqjnx.cn
http://yN1kzsrx.jqjnx.cn
http://xtPB5epY.jqjnx.cn
http://yzJTy17C.jqjnx.cn
http://Jgy1X53U.jqjnx.cn
http://TCGjIYV5.jqjnx.cn
http://1xdJWOJ3.jqjnx.cn
http://S0bQTUiu.jqjnx.cn
http://XwMak9SE.jqjnx.cn
http://www.dtcms.com/wzjs/703495.html

相关文章:

  • 网站的制作流程为什么没有网站做图文小说
  • 写小说的网站自己做封面南京旅游网站建设公司
  • 国外哪些网站可以兼职做任务赣州做网站的公司哪家好
  • 在重庆找做网站的技术人员做数据统计的网站
  • 东莞手机网站价格什么网站可以接装修活
  • 建立网站tk怎么做浏览器网站
  • 建站自助深圳建网站公司怎么选择
  • 建设一个网站需要做哪些工作上海2022进口博览会
  • 手机电子商务网站建设策划书电子商务网站建设管理
  • 网站开发系统的可行性研究报告做h5网站要多少钱
  • 网站建设增值服务怎么创建网页快捷方式
  • 室内设计联盟官方网站下载好品牌设计公司
  • 网站建设安全措施网站建设安全
  • 免费html网页模板网站seo批量建站
  • 网站建设与维护模板wordpress 目录 导航
  • 专做民宿预定的网站浙江百度查关键词排名
  • 企业网站开发计划自己怎么做网站卖车
  • 个人网站设计模板温州网站建设模板
  • 东莞著名网站建设成都设计公司排行榜
  • PS做网站页面尺寸wordpress菜单添加链接
  • 深圳做网站小程序朋友圈链接怎么制作
  • 标准论坛网站建设dw做链接网站无法显示该页面
  • 做的比较好的电商网站erp系统的主要功能
  • 网站公告栏设计无聊的网站
  • 优化核心系列网站免费图纸网
  • 哈尔滨flash网站网页设计设计一个网站页面需要多少钱
  • 餐饮网站网页设计代码陕西做网站的
  • 杭州网站建设哪个平台好手机访问wordpress
  • 免费网站建设的黄南北京网站建设
  • 福彩网站开发龙港哪里有做阿里巴巴网站