人工精选爱编程的大丙高并发【Reactor】服务器 - CC++ 版
这门课解决什么工作场景 很多做后端的开发者在面对高并发网络通信时,常常卡在理论层面:知道 epoll 和非阻塞 IO 的概念,但真要自己从零搭一个能稳定处理成百上千连接的服务器,却无从下手。这门课针对的就是这个痛点。它不空谈架构,而是带你用 C 和 C++ 逐步实现一个类似 Muduo 网络库的高并
会员 · 按档位
游客按标价购买,不享受上表折扣。
支付成功后自动发放网盘链接,链接失效可找客服免费补
这门课解决什么工作场景
很多做后端的开发者在面对高并发网络通信时,常常卡在理论层面:知道 epoll 和非阻塞 IO 的概念,但真要自己从零搭一个能稳定处理成百上千连接的服务器,却无从下手。这门课针对的就是这个痛点。它不空谈架构,而是带你用 C 和 C++ 逐步实现一个类似 Muduo 网络库的高并发服务器,并向上延伸到应用层,用 HTTP 协议打通 B/S 架构,最终让服务器能直接接收并处理浏览器的 GET 和 POST 请求。如果你在做基础架构、后端服务开发,或者需要深入理解网络框架底层的运行机制,这就是你需要的实战拆解。
适合什么基础与资料怎么用
这不适合完全没写过代码的转行者。你需要具备基本的 C/C++ 语法基础,了解 Linux 常用命令和基础网络概念。资料包里的内容不是听一遍就能吸收的,建议按照“先看图解理清思路,再跟着视频敲代码”的节奏来。具体来说,先把概述类的 PDF 文档和思维导图过一遍,建立对多反应堆模型整体结构的认知;然后再看视频,跟着步骤从创建监听套接字、搭建 epoll 雏形开始写。视频里讲到建立新连接和解析 HTTP 数据块时,务必结合《图解 HTTP》对照着看,搞懂协议格式的细节。最后,把项目代码包下载下来,不是用来抄的,而是当你自己写的代码跑不通时,用来做局部比对排查的。
建议先看哪几块与学完能独立做什么
建议先看“多反应堆模型结构概述”和“epoll 工作模型雏形”这两部分,这是整个服务器的骨架,搞懂事件分发机制,后面的业务逻辑才有依附的基座。接着重点看“HTTP 请求数据块的格式”相关章节,这是打通网络层和应用层的关键。学完之后,你不应该只是复刻了老师的代码,而是能独立完成一个具备事件驱动能力的网络服务端。你能自己写代码处理客户端并发连接,解析浏览器发来的 HTTP 报文,并基于这个底层模型扩展出自己的业务逻辑。当你再去看 Muduo 等开源网络库的源码时,面对 Reactor 模式的封装和回调机制,你会很清楚每一步到底在干什么。
从零开始,以C语言和C++分别实现类似Muduo网络库的服务器。应用层采用Http协议,打造出B/S架构模型,能处理浏览器请求。课程详细剖析每个环节,无论是初学
课程目录
* 00 资料/
* 01 项目模块-xmind.pdf
* 02 Http高并发服务器 概述.pdf
* 03 Http Web 服务器.pdf
* 04 图解HTTP-彩色版.pdf
* 05 项目代码.zip.zip
* 01 1. 项目概述以及要求
* 02 2. 项目效果展示
* 03 3. 关于项目业务层的说明
* 04 4. 多反应堆模型结构概述
* 05 5. 在VS中创建基于Linux的项目
* 06 6. 初始化服务器端用于监听的套接字
* 07 7. epoll 工作模型的雏形
* 08 8. 和客户端建立新连接
* 09 9. http的get请求数据块的格式
* 10 10. http的post请求数据块的格式
* 11 11. http响应消息的数据格式
* 12 12. http的状态码和如何指定content-type
* 13 13. 接收客户端的http请求消息
* 14 14. sscanf 函数的使用
* 15 15. 解析请求行
* 16 16. 发送文件的两种方式
* 17 17. 组织http响应的数据块头
* 18 18 通过http响应消息发送文件
* 19 19. Linux 中遍历目录的两种方式
* 20 20. 发送目录-上
* 21 21. 发送目录-下
* 22 22. 代码的补充和编译
* 23 23. 程序测试和部分bug的修改
* 24 24-非阻塞模式下关于sendfile函数的说明
* 25 25. 解决浏览器无法访问带特殊字符的文件的问题
* 26 26. 添加多线程处理
* 27 27. 第2阶段模块功能概述
* 28 28. Channel 模块的实现
* 29 29. ChannelMap 模块的实现 - 上
* 30 30. ChannelMap 模块的实现 - 下
* 31 31. Dispatcher 模块的实现思路
* 32 32. Dispatcher 的定义
* 33 33. EpollDispatcher 的实现 - 上
* 34 34. EpollDispatcher 的实现 - 中
* 35 35. EpollDispatcher 的实现 - 下
* 36 36. PollDispatcher 的实现 - 上
* 37 37. PollDispatcher 的实现 - 下
* 38 38. SelectDispatcher 的实现
* 39 39. EventLoop 模块的剖析
* 40 40. EventLoop 的初始化
* 41 41. 启动 EventLoop
* 42 42. 在 EVentLoop 中处理被激活的文件描述符的事件
* 43 43. 往 EventLoop 的任务队列中添加新任务
* 44 44. 主线程给子线程添加任务以及如何处理该任务
* 45 45. 处理任务队列中的任务
* 46 46. 将任务队列中的任务添加到 Dispatcher 的检测集合中
* 47 47. 任务队列中节点在 Dispatcher 中的删除和修改
* 48 48. 子线程 WorkerThread 的实现
* 49 49. 线程池 ThreadPool 的初始化
* 50 50. 线程池的启动和从线程池中取出一个反应堆实例
* 51 51. Buffer 的创建和销毁
* 52 52. Buffer 的扩容
* 53 53. Buffer 的数据写入-直接写
* 54 54. 通过 Buffer 接收套接字数据
* 55 55. 创建并初始化 TcpServer 实例
* 56 56. 启动 TcpServer
* 57 57. 主线程反应堆模型的事件添加和处理详解
* 58 58. 创建一个 TcpConnection 实例
* 59 59. 在 TcpConnection 接收客户端数据
* 60 60. HttpRequest 的定义和初始化
* 61 61. HttpRequest 资源重置和销毁
* 62 62. 添加和查找 HttpRequest 请求头
* 63 63. 解析请求行(通过指针方式解析非 sscanf 方式)
* 64 64. 优化解析请求行的代码
* 65 65. 解析请求头并存储
* 66 66. 解析完整的 http 请求协议
* 67 67. 处理 http 请求 - 上
* 68 68. HttpResponse 的定义和初始化
* 69 69. HttpREsponse 添加响应头和内存释放
* 70 70. 组织 HttpResponse 响应消息
* 71 71. 处理 Http 请求 - 下
* 72 72. 修改发送目录和文件的函数
* 73 73. 在 TcpConnection 中接收并解析 Http 请求消息
* 74 74. 给客户端回复数据的两种方式-上
* 75 75. 给客户端回复数据的两种方式 - 下
* 76 76. 内存资源的释放
* 77 77. 程序的编译和错误的修改 - 上
* 78 78. 程序的编译和bug的修改 - 下
* 79 79. 启动服务器和添加日志功能
* 80 80. 程序的调试和bug修改 - 上
* 81 81. 程序的调试和bug修改 - 下
* 82 82. 使用CPP重构项目-前言
* 83 83. 重构 Channel 类
* 84 84. 重构 Dispatcher 类
* 85 85. 重构 EpollDispatcher 类
* 86 86. 重构 PollDispatcher 类
* 87 88. 重构 EventLoop 类 - 1
* 88 87. 重构 SelectDispatcher 类
* 89 89. 重构 EventLoop 类 - 2
* 90 90. 重构 EventLoop l类 - 3
* 91 91. 重构 EventLoop 类 - 4
* 92 92. 重构 EventLoop 类 - 5
* 93 93. 重构 ThreadWorker 类
* 94 94. 重构 ThreadPool 类
* 95 95. 重构 TcpServer 类
* 96 96. 重构 Buffer 类 - 上
* 97 97. 重构 Buffer 类 - 下
* 98 98. 重构 HttpRequest 类 - 1
* 99 99. 重构 HttpRequest 类 - 2
* 100 100. 重构 HttpRequest 类 - 3
* 101 101. 重构 HttpRequest 类 - 4
* 102 102. 重构 HttpResponse 类
* 103 103. 重构 HttpResponse 类 - 续
* 104 104. 重构 TcpConnection 类 - 上
* 105 105. 重构 TcpConnection 类 - 下
* 106 106. 多反应堆服务器事件处理流程梳理
* 107 107. 程序的编译和语法上的bug修改
* 108 108. 测试和bug修改
* 109 109. 内容更正
* 110 110. 答疑-1 线程死锁
* 111 111. 答疑2 项目中如何使用互斥锁保护任务队列
* 112 112. 答疑3 关于阻塞的唤醒
* 113 113. 答疑4 关于子线程的阻塞问题





