2

「项目复现」Web服务器编程之简介

 2 years ago
source link: https://magicdeveloperdrl.github.io/2022/04/08/%E9%A1%B9%E7%9B%AE%E5%A4%8D%E7%8E%B0-Web%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%AE%80%E4%BB%8B.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

「项目复现」Web服务器编程之简介

Apr 8, 2022 • MRL Liu,WJ

[TOC]

​ 本文总结作者学习的Web服务器项目(WebServer),分析其中的主要模块的作用及相关知识点。一个WebServer是一个运行在linux系统上的C++编码的服务器程序,其需要处理来自浏览器程序(客户端)的各种HTTP请求,并对其请求作出HTTP响应。

​ 本项目的主要流程如下:

​ 从上述图中可以看出其中共有7个模块:日志系统模块、监听套接字模块、IO复用模型epoll模块、线程池模块、数据库连接池模块、HTTP连接模块、定时器模块。接下来分别介绍这几个模块的相关知识。

一、日志系统模块

1、项目编译工具MakeFile

2、C++11的智能指针

3、C++11中哈希表的使用

二、监听套接字模块

​ 用户在Web浏览器在浏览器中输入“域名”或“IP地址:端口号”,浏览器则先将你的域名解析成相应的IP地址或者直接根据你的IP地址向对应的Web服务器发送一个HTTP请求。这一过程首先要通过TCP协议的三次握手建立与目标Web服务器的连接,然后HTTP协议生成针对目标Web服务器的HTTP请求报文,通过TCP、IP等协议发送到目标Web服务器上。

​ Web服务器想要建立与浏览器的TCP连接,就需要进行Socket编程

1、Socket编程

(1)服务器创建监听套接字的步骤和API分别是什么?

创建socket【socket()】、绑定socket地址【bind()】,监听socket【listen()】

(2)TCP的断开方式有哪些?本项目中如何设置TCP的断开方式?

(3)socket默认是阻塞的,本项目中为什么将其设置为非阻塞模式?

2、TCP/IP协议

(1)TCP/IP协议的特点是什么,TCP/IP协议与socket的关系?

(2)TCP/IP协议的三次握手与四次挥手是什么?

3、IO复用模型Epoll

4、HTTP协议的特点

5、HTTP请求和HTTP相应的实现

三、IO复用模型epoll模块

四、线程池模块

1、互斥锁

2、条件变量

3、线程池

五、数据库连接池模块

1、数据库连接池

2、RAII机制

5、单例模式的C++实现

8、阻塞队列

六、HTTP连接模块

4、正则表达式的使用

6、状态机

七、定时器模块

7、基于小根堆实现的定时器

「环境配置」Windows安装PyCharm专业版

「论文分享」学习连续控制问题的可解释的高性能策略


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK