C++ LinuxWebServer项目(3)高效响应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的区别
相关文章
- C++ 获取当前时间
- C++ 获取线程入口地址、所在模块
- Word处理控件Aspose.Words功能演示:使用 C++ 以编程方式将 Word 转换为 HTML 、MHTML
- [c++菜鸟]《Accelerate C++》习题解答
- C++第11周项目3(2)——千以内的素数
- C02-程序设计基础提高班(C++)第10周上机任务-类和对象之二
- Inside C++ object Model--构造函数
- C/C++ 数据结构之算法(面试)
- C++中extern关键字的作用
- 开源免费的C/C++网络库(c/c++ sockets library)补充
- 《C++ Templates中文版》——1.3 如何阅读本书
- C 与 C++ 谁的效率高,为什么?(结论是,两个不同层次的语言不应该相互比较,非要比较的话,是不同情况下各有快慢)
- clang-format 对 c++ 进行格式化
- C++中的构造函数与析构函数
- Visula Studio 2013 初始化静态浮点型数据在C++类内
- C/C++跨平台的的预编译宏
- 详解C++ STL map 容器
- C++ std::thread join() 与 detach 的理解
- Use auto keyword in C++11