基于C++的HTTP WebServer实现 (2)--Connection类逻辑优化

本系列主要记录自己在学习过程的思路、问题、解决方法。最后实现一个高性能的HTTP 服务器,用于学习cpp、网络编程、服务器相关的内容。
系列目录

  1. HTTPServer-动态缓冲区
  2. HTTPServer-Connection类逻辑优化
  3. git相关问题与解决方法
  4. Sourcetrail使用说明

本文记录了对于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_;
};

未完待续。。。

本项目基于开源项目《30daysCppWebServer》进行学习、实现、优化

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值