06libevent下通信中bufferevent缓冲区的特性介绍

06libevent下通信中bufferevent缓冲区的特性介绍

以下是关于libevent学习的相关文章:
01libevent库的下载与安装并且测试是否安装成功
02libevent库的整体框架思想
03libevent下通信的主要函数
04libevent库下fifo作为通信的套接字
05libevent库下未决与非未决的解释
06libevent下通信中bufferevent缓冲区的特性介绍
07libevent库下bufferevent事件的相关函数
08libevent库下通信服务端与客户端的主要函数
09libevent库服务端与客户端的TCP通信流程和代码示例

1 bufferevent缓冲区的特性介绍
我们知道,socket网络通信套接字是带有两个缓冲区的,分为读写缓冲区,例如服务端客户端共四个缓冲区。
而bufferevent事件对象也是用于socket网络通信的,所以每一个bufferevent对象也是带有两个缓冲区,即读写缓冲区。

2 图片解释
在这里插入图片描述
对上面的图进行解释:当我们监听了该事件的读写后,读事件被触发时,读缓冲的回调函数被触发,我们只需要在该回调函数中用bufferevent_read()读取即可,不能再用read(),因为他封装时不支持;
对着上面,你可能会想,既然读事件是触发后调用回调函数读取,那么写事件就应该是写事件触发后调用回调函数写即可;但真的是这样吗?
你想一下,写事件是谁触发的?是你自己啊,所以一般写事件是在读事件的回调函数中用bufferevent_read()读完后就写数据进缓冲,其它不需要你再处理,系统会帮你自动发送,你只需要写进缓冲即可,所以很多时候有些人在使用bufferevent_setcb()设定bufferevent的写回调事件时,即参数3,置为空,因为它根本不需要你处理,你只需要在某个地方写进缓冲即可。

所以总结上面的话就是:
读是读事件触发才调用回调函数在回调中读;
而写是直接在某个地方写数据即可(一般是读回调函数中读完后写);而不是在写回调函数中写。当然你也可以再里面写,或者做一些写完成后的信息打印。

猜你喜欢

转载自blog.csdn.net/weixin_44517656/article/details/108762584