深入 C 语言和程序运行原理
于航
PayPal 技术专家
21121 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
深入 C 语言和程序运行原理
15
15
1.0x
00:00/00:00
登录|注册

24|实战项目(下):一个简单的高性能 HTTP Server

提交 PR
提出实现方案
程序运行
代码编译
模块功能编写
目录创建
使用 cmake 和 make
应用程序编译
libs 目录下静态库编译
renewThread 回调函数
pthread_cleanup_push 和 pthread_cleanup_pop
acceptParams 结构
acceptConn 函数
构造 HTTP 响应报文
calcFibonacci 统一接口
__calcFibRecursion 和 __calcFibTCO 函数
使用 uriparser 库
解析查询参数值
提取路径(URI)
使用 accept, read, write, close 接口
使用 socket, bind, listen 接口
setupServerSettings 函数
使用 argc 和 argv
threadCount: 控制线程数量
根目录: 控制应用程序编译流程
libs: 控制libs目录编译流程
src: 应用程序源代码
libs: 模块化功能实现
build: 临时编译结果
如何通过复用 TCP 连接优化性能
C 语言工程实战技巧
项目开发过程
编译命令
CMakeLists.txt 配置
优雅地处理异常
分离处理线程
返回响应
计算斐波那契数列
解析请求
管理连接
监听请求
解析参数
serverSettings 结构
CMakeLists.txt
目录结构
思考题
总结
编译与运行
整合多线程
处理 HTTP 请求和响应
实现 TCP Server
处理用户输入参数
项目基本结构
FibServ HTTP Server 实战项目总结

该思维导图由 AI 生成,仅供参考

你好,我是于航。
23 讲 中,我对本次实战项目将要构建的程序 FibServ 的功能做了基本介绍,并从理论的角度,带你对它的基本实现方案有了一个初步认识。而这一讲,我们将通过实际编码,来应用这些理论知识。
为了便于你理解这一讲的内容,我已经将本项目的完整代码实现放到了 GitHub 上,你可以点击这个链接,先大致浏览一下每个源文件的内容。而在后续讲解到相关代码时,我也会在整段代码的第一行,通过注释的方式将这些代码的所在源文件标注出来。比如注释 “libs/structs.h#L9-L11”,便表示当前所示的代码段对应于项目 libs 目录下,structs.h 文件内的第 9 到 11 行。其他注释的含义你可以此类推。
接下来,我会带你从基本的项目目录创建,到模块功能编写,再到代码编译和程序运行,一步步地完成整个项目的开发过程。

项目基本结构

首先,我们来看应该如何组织整个项目的目录结构。根据预估的项目体量,我使用了如下图所示的目录结构:
这里,整个项目包含有三个目录:build、libs 以及 src。其中,build 目录用于存放程序在 CMake 下的临时编译结果。如果你对这个目录还不太熟悉,可以参考我在 22 讲 中为你介绍的例子。libs 目录中主要存放可以模块化的独立功能实现,这些功能会以头文件的形式来提供外部可用接口,以供不同的应用程序使用。而最后的 src 目录则存放有与应用程序 FibServ 实现相关的源代码。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了一个高性能 HTTP Server 的实现过程,主要包括项目结构、用户参数处理、TCP Server 核心功能、HTTP 请求和响应处理、斐波那契数列计算以及多线程优化。作者通过具体的代码示例,带领读者了解了一个高性能 HTTP Server 的开发流程。文章首先介绍了如何处理用户输入参数,包括解析用户传入的参数并保存到特定的数据结构中。然后详细讲解了 TCP Server 的核心功能,包括监听请求和管理连接。接着,作者讲解了如何处理 HTTP 请求和响应,包括解析请求报文、计算结果并构造合法的 HTTP 响应报文返回给客户端。此外,文章还介绍了斐波那契数列的计算方法,并展示了多线程优化的实现过程。整篇文章以实际的代码示例为主线,通过具体的实现过程带领读者了解了一个高性能 HTTP Server 的开发流程。文章还介绍了项目的编译与运行过程,以及对应的 CMakeLists.txt 文件配置。最后,作者总结了整个项目的开发过程,并鼓励读者通过评论区或提交 PR 的方式分享优化性能的实现方案。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入 C 语言和程序运行原理》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • fee1in
    置顶
    花了两个小时 终于将示例跑通 后面的同学doxygen问题 可以参考老师在uriparser的issue https://github.com/uriparser/uriparser/issues/137
    2022-02-16
    1
    3
  • 叶兰
    于老师讲的太好了,受益匪浅

    作者回复: 感谢支持!

    2022-02-16
    2
  • 校歌
    老师你好,我没写过C项目,包管理感觉还是go的项目爽😁;运行报错如下 # cmake .. ... Could not find a package configuration file provided by "uriparser" ... 为了跑老师的项目,本地安装了libgtest-dev和源码编译安装 uriparser,项目才跑起来。不知有没有简单的办法,类似go mod tidy 或者go get xxx 获取go项目的依赖呢?

    作者回复: 据我所知 C 应该是没有被广泛使用的包管理器的,这方面确实不如 Rust、Go 等语言先进。

    2022-06-18
  • brian
    老师啊,epoll和异步io都没有用上,不能算高性能吧
    2023-04-28归属地:芬兰
  • lunar
    第一次跑C项目 还要自己装一下第三方库,学习的路上又踏出了一步 -DURIPARSER_BUILD_DOCS=OFF
    2022-03-20
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部