前言
WebServer是一个很好的入门级C++项目,因为它涉及到了方方面面,不仅可以提高编程能力,还包括了操作系统、计算机网络、数据库等方面的知识,所以我很推荐大家去入手这个项目。说细一点这个项目包含系统编程、日志系统、线程池、网络知识、并发模型等实现,但是很多人一开始做这个项目的时候,会觉得逻辑很混乱从而无从下手,所以我写下这篇文章目的就是帮助大家起到一个梳理逻辑的作用,好了废话不多说,咱们往下看!
一、下载项目、功能测试
拿到一个项目首先不要着急自己复现、也不要着急去看功能,首先我们要测试一下能不能跑成功
qinguoyi/TinyWebServer: 🔥 Linux下C++轻量级WebServer服务器 (github.com)以这个项目为例
在这个过程中,可能会遇到如下这个问题:
不要慌~ 作者给出了解决方案
二、Demo演示
三、该怎么去看框架?
首先进入到main函数里,一层一层的看依赖关系,直到找到最里面的那一层,也就是最底层,然后从最底层开始,一个文件一个文件的写。我们举例来看,main函数里面,最先是个Config类的对象,这个对象用来进行配置操作,比如对端口号、日志写入方式、触发组合模式等等的赋值,所以我们暂且不管它。接下来我们可以观察到,有一个WebServer类的对象server,并且发现server调用了一堆函数,那我们便知道最后在main函数里面全部依靠server这个对象实现,所以不难得出,WebServer类就是我们的最高层,通过最终封装一个WebServer类来实现一切功能,但是我们要找到是最底层,从最底层一层一层往上写,所以接下来我们进入WebServer类进行观察,我们知道WebServer类的主要职责就是将之前设计的各个模块串联在了一起,我们可以观察到WebServer类中有许多数据成员和成员函数,我们暂时不需要知道这些成员是具体来干什么的,只需要先知道其中的函数是给自己相关的数据成员赋值的或者实现某个功能,比如在log_write()中来决定是异步写日志还是同步写日志,sql_pool()函数是用来申请一个数据库连接池的对象,并且进行初始化等操作,thread_pool()是用来申请一个线程池对象,并进行相关初始化操作的。我们目前不需要知道很多信息,但是请务必先留意一下eventListen()和eventLoop()这两个函数,我们先进入webserver.cpp中去看,注意到eventListen()是用来进行监听的,当有新客户来临的时候,将它加入监听集合,那eventLoop()是用来干什么的呢?可以看到它的循环体里面,好像是在等待事件发生,然后再处理各种各样的事情并且一直在循环,是的,它就是我们的主循环函数,是用来处理各种业务的。接下来既然我们是WebServer服务器项目,那什么是最重要的呢?没错当然是http解析了,所以接下来我们看http解析的实现,浏览器(客户端)发起http连接请求,我们的服务器就会接收到请求,并且需要将请求的内容记录起来,最后再做出响应的答复给浏览器,在http类中,我们要做的事情就是接收连接&#
评论前必须登录!
注册