zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C++ LinuxWebServer项目(3)高效响应HTTP请求

C++响应项目HTTP 高效 请求
2023-09-11 14:20:00 时间

一、前言

在逻辑处理模块中,响应HTTP请求采用主从状态机来完成。

传统的控制流程都是按照顺序执行的,状态机能处理任意顺序的事件,并能提供有意义的响应—即使这些时间发生的顺序和预计的不同。

二、如何响应收到HTTP请求的报文

(1) http连接请求处理

在启动服务器时,先创建好线程池。当浏览器端发出http连接请求,主线程创建http类对象数组用来接收请求并将所有数据读入各个对象对应buffer,然后将该对象插入任务队列;如果是连接请求,那么就将他注册到内核事件表中(通过静态成员变量完成)。线程池中的工作线程从任务队列中取出一个任务进行处理(解析请求报文)。

(2) http响应报文处理流程

当上述报文解析完成后,服务器子线程调用process_write完成响应报文,响应报文包括

1.状态行:http/1.1 状态码 状态消息;

2.消息报头,内部调用add_content_length和add_linger函数

l content-length记录响应报文长度,用于浏览器端判断服务器是否发送完数据

l connection记录连接状态,用于告诉浏览器端保持长连接

3.空行

随后注册epollout事件。服务器主线程检测写事件,并调用http_conn::write函数将响应报文发送给浏览器端。至此整个http请求和响应全部完成。

(3) GET和POST的区别