本系列主要记录自己在学习过程的思路、问题、解决方法。最后实现一个高性能的HTTP 服务器,用于学习cpp、网络编程、服务器相关的内容。
系列目录
本文记录了对于connection类重构优化的学习过程和设计、实现,供大家参考。
背景
Connection类功能
在最初版的connection类中,主要是用来管理已经建立的tcp连接(对应的channel、缓冲区、所属事件循环),在构造函数中会将其和对应的事件循环绑定,并初始化输入输出缓冲区,随后将socket中的内容读入缓冲区中供上层使用。同时只提供了一个回调函数接口供上层使用
优化方向
之前的版本中,将缓冲区中的内容发送至socket中的工作是由缓冲区来完成的。这显然并不合理,因为缓冲区是由connection类管理的,他并不应该把自己的接口暴露给上层server类中。
与此同时,在服务端中使用connection时io读写模式都是非阻塞的,而在客户端client中,多数业务使用阻塞式,所以如果想要复用connection类,需要支持阻塞读写。
故得出对于connection类的优化目标:
- 封装读写缓冲区的操作
- 实现客户端、服务器对于read/write功能的复用
- 支持阻塞读写
Connection类设计
Connection类定义
class MyConnection
{
public:
MyConnection(MyEventLoop *loop, int c_sockfd);
~MyConnection();
void setConnectionCallback(std::function<void(int)> cb);
Buffer &getInputBuffer() { return inputBuffer_; }
Buffer &getOutputBuffer() { return outputBuffer_; }
private:
MyEventLoop *event_loop_;
MyChannel *channel_{nullptr};
std::function<void(int)> connection_callback_;
Buffer inputBuffer_;
Buffer outputBuffer_;
};
未完待续。。。
9488

被折叠的 条评论
为什么被折叠?



