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

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

2 图片解释

android logd socket 缓冲_c语言


对上面的图进行解释:当我们监听了该事件的读写后,读事件被触发时,读缓冲的回调函数被触发,我们只需要在该回调函数中用bufferevent_read()读取即可,不能再用read(),因为他封装时不支持;

对着上面,你可能会想,既然读事件是触发后调用回调函数读取,那么写事件就应该是写事件触发后调用回调函数写即可;但真的是这样吗?

你想一下,写事件是谁触发的?是你自己啊,所以一般写事件是在读事件的回调函数中用bufferevent_read()读完后就写数据进缓冲,其它不需要你再处理,系统会帮你自动发送,你只需要写进缓冲即可,所以很多时候有些人在使用bufferevent_setcb()设定bufferevent的写回调事件时,即参数3,置为空,因为它根本不需要你处理,你只需要在某个地方写进缓冲即可。

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