libevent(15)bufferevent filter的过滤器及例子

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

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值