一、bufferevent filter简单说明

filter之类的东西,相信有php框架或java springboot经验的程序员应该很熟悉,就是加载在输入流之前或输出流之后的一个处理器,用来从业务处分离开来做一些额外的事情。
(1)读取(接收)的数据先进入过滤器中,在过滤器处理完成后再传递给用户进行读取,即 过滤在读取之前 ,例如压缩数据要先在 filter 中解压,然后在 underlying 读取解压后的原始;
(2)写入(发送)的数据由用户发起,再传给过滤器,过滤器处理完后再发送出去,即 过滤在写入之后 ,例如在 underlying 中发送的原始数据,会在 filter 中进行压缩后再发送。
二、bufferevent API
1、bufferevent_filter_new
struct bufferevent *
bufferevent_filter_new(struct bufferevent *underlying,
bufferevent_filter_cb input_filter,
bufferevent_filter_cb output_filter,
int options,
void (*free_context)(void *),
void *ctx);
回调函数 bufferevent_filter_cb:
/**
* @brief: 回调函数,用于实现 bufferevent 的过滤器
*
* @param src: 源事件缓存
* @param dst: 目的事件缓存
* @param dst_limit: 写入 dst 的字节上限,-1表示无限制
* @param mode: 数据刷新模式
* @param ctx: 用户传递的参数
*
* @return: 返回过滤器的处理结果,详见后面说明
*/
typedef enum bufferevent_filter_result (*bufferevent_filter_cb)(
struct evbuffer *src, struct evbuffer *dst,
ev_ssize_t dst_limit, enum bufferevent_flush_mode mode, void *ctx);
// filter 回调函数返回值
enum bufferevent_f

文章介绍了bufferevent_filter的概念,它是加载在输入流和输出流上的处理器,用于在数据读取前或写入后进行额外处理。文中详细阐述了filter的工作原理,包括读取数据的解压和写入数据的压缩等场景,并给出了bufferevent_filter_new函数的使用示例以及相关API,如evbuffer_add和evbuffer_remove。此外,还提供了一个将输入和输出数据转换为大写的例子来说明filter的使用方法。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



