muduo Buffer设计要点:
1.一块连续的内存(char *p, int len)。
2.size()可以自动增长,以适应不同大小的消息。
3.内部以std::vector<char>来保存数据,并提供相应的访问函数。
Buffer像一个queue,从末尾写入数据,从头部读出数据。
TcpConnection会有两个Buffer成员:input buffer, output buffer
1.input buffer, TcpConnection会从socket读取数据,然后写入input buffer (用Buffer::readFd()完成);客户代码从input buffer读取数据。
2.output buffer, 客户代码会把数据写入output buffer( 用TcpConnection::send()完成);TcpConnection从output buffer读取数据并写入socket。
Buffer的数据结构
Buffer的内部是一个std::vector<char>,有两个成员指向该vector中的元素。如图所示:
两个index把vector的内容分为三块:prependable, readable, writable。
各块大小:
prependable = readIndex