目录
muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。
muduo github网址:https://github.com/chenshuo/muduo
一、Buffer的数据结构
muduo设计了buffer做为发送和接收数据的缓存,Buffer的内部是一个std::vector<char>,是一块连续的内存,其中有两个index,readIndex和writeIndex把vector的内容分成三块:prependable、readable、writeable
prependable = readIndex;
readable = writeIndex-readIndex
writable = size() - writeIndex
二、Buffer的操作
假设发送方发送了两条消息,长度分别为50字节和350字节,接收方分两次收到数据,每次200字节,然后进行分包,再分两次回调客户代码,其中readIndex和writeIndex被初始化为8,size()初始值为1032,这个过程Buffer的数据结构变化如下所示:
(1)初始值
(2)向Buffer里写入200字节
(3)从Buffer里读取50字节
(4)向Buffer里写入 200字节
(5)从Buffer里读取350字节
由于此时全部数据已经读取完毕,readIndex和writeIndex会返回原位以备再次使用。
muduo Buffer还支持内部腾挪,当readIndex比较靠后,留下巨大的prependable空间时,如果此时进行写入而writeable空间不够,Buffer不会重新分配内存,而是先把已有的数据移到前面去,腾出writable空间。