![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
从零开始自制WebServer
文章平均质量分 92
Love 6
腾讯WXG在职后台小鹅
展开
-
从零开始自制实现C++ High-Performance WebServer 全流程记录
文章目录前引前引这个 从零自制高性能多线程的WebServer博客系列呢 刚开始我写之初 其实也就是想记录一下 一个linux后端开发者 以此作为 网络编程的起点 以及多线程编程的起点的博客记录而已因为刚开始 对于很多后台开发的前辈啊 所给出的后端学习的路啊 就比如写一个WebServer 其实这个项目就个人而言 真的肯定是 作为后台开发最好的入手的一个项目了 这个WebServer 不是写一个 就只能支持HTTP协议的服务器 而是从零开始写一个能够具有超级高的复用性的网络库 以此的基础上来实原创 2022-04-24 18:57:51 · 13895 阅读 · 9 评论 -
从零开始自制实现WebServer(二十)---- C++ High-Performance WebServer源码实现(Logging核心代码部分)
文章目录前引(二十)---- C++ High-Performance WebServer源码实现(Logging核心代码部分)1、asynclogging.h1、asynclogging.cc2、logfile.h2、logfile.cc3、logging.h3、logging.cc4、logstream.h4、logstream.cc前引这部分写完了 待会把总结博客写了就回寝室好好休息 吃顿饭 看部电影休息去啦~(二十)---- C++ High-Performance WebServer原创 2022-04-24 18:48:06 · 819 阅读 · 0 评论 -
从零开始自制实现WebServer(二十)---- C++ High-Performance WebServer源码实现(Timer核心代码部分)
文章目录前引(二十)---- C++ High-Performance WebServer源码实现(Timer核心代码部分)1、timer.h1、timer.cc2、timerqueue.h2、timerqueue.cc前引还有两个Timer和Logging(二十)---- C++ High-Performance WebServer源码实现(Timer核心代码部分)1、timer.h#ifndef TINY_MUDUO_TIMER_H_#define TINY_MUDUO_TIMER原创 2022-04-24 18:38:07 · 693 阅读 · 0 评论 -
从零开始自制实现WebServer(二十)---- C++ High-Performance WebServer源码实现(Http核心代码部分)
文章目录前引(二十)---- C++ High-Performance WebServer源码实现(Http核心代码部分)1、httpcontent.h1、httpcontent.cc2、httprequest.h2、httprequest.cc3、httpparsestate.h4、httpresponse.h4、httpresponse.cc5、httpresponsefile.h6、httpserver.h6、httpserver.cc前引继续贴贴HTTP部分、(二十)---- C++ H原创 2022-04-24 18:26:51 · 2476 阅读 · 0 评论 -
从零开始自制实现WebServer(二十)---- C++ High-Performance WebServer源码实现(Base核心代码部分)
文章目录前引(二十)---- C++ High-Performance WebServer源码实现(Base核心代码部分)1、address.h2、callback.h3、condition.h3、condition.cc3、currentthread.h4、latch.h5、mutex.h6、noncopyable.h7、timestamp.h前引这部分写了 待会出去开开心心吃顿饭 奖励一下自己把总结博客给发了(二十)---- C++ High-Performance WebServer源码原创 2022-04-24 18:05:29 · 2277 阅读 · 0 评论 -
从零开始自制实现WebServer(二十)---- C++ High-Performance WebServer源码实现(Util核心代码部分)
文章目录前引(二十)---- C++ High-Performance WebServer源码实现(Util核心代码部分)1、acceptor.h1、acceptor.cc2、buffer.h2、buffer.cc3、channel.h3、channel.cc4、epoller.h4、epoller.cc5、eventloop.h5、eventloop.cc6、eventloopthread.h6、eventloopthread.cc7、eventloopthreadpool.h7、eventloopthr原创 2022-04-24 17:59:36 · 1400 阅读 · 0 评论 -
从零开始自制实现WebServer(十九)---- 正式系统的学习一下Git 捣鼓捣鼓github以及一些其他的小组件
文章目录前引前引说来惭愧 现在已经是晚上的9:14了 刚刚在寝室的床上躺着 看了看我的甄选华子RNG的春决 本来已经2:0了 我就打算看一把 结果就输了 希望待会能拿下吧其实不是惭愧的是这个 惭愧的是什么呢 惭愧的是到目前为止 我都没有系统的学习过GIT 没有系统的看过一本关于讲解Git的书 很多人用Git当版本控制来用 我也经常需要做这样的工作由于原来编写操作系统的时候 有一次忽然虚拟机坏了 磁盘文件损坏了 我没有做备份 好像不是这个原因 好像是当时我改动了几行代码 但不清楚在哪个位置我改动了原创 2022-04-24 17:30:46 · 713 阅读 · 0 评论 -
从零开始自制实现WebServer(十八)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章
文章目录前引(十七)---- 对服务器做最后的压力测试 WebBench压测小工具 项目迎来终章1、正确处理Vmware-Station 处理器设置(初步调试过程)2、正确处理Vmware-Station 处理器设置(设置结果)3、c10k压力测试 对比Linya学长的WebServer(短连接)3、c10k压力测试 对比Linya学长的WebServer(长连接 存疑)4、c10k压力测试 对比muduo库的Webserver(短连接)结束语前引没想到这个系列写到第十七篇了 哈哈写这段话的时候原创 2022-04-23 18:27:14 · 3555 阅读 · 0 评论 -
从零开始自制实现WebServer(十七)---- 重新阅读Muduo服务器编程书籍 做最后的小改小动 项目终究要迎来终声了
文章目录前引(十七)---- 重新阅读Muduo服务器编程书籍 做最后的小改小动 项目终究要迎来终声了1、channel加个weak_ptr 为运行回调过程中保驾护航2、前引本来打算在寝室呆一会的 结果还是没有呆 就回图书馆了结果回图书馆了 感觉人有点疲倦 就趴着睡了会觉下午4点睡 现在7点… 属实是报复性补觉了感觉这种睡觉太不健康了 每次一睡我就要睡这么久 而且睡觉起来的时候 头还有晕那么久 不知道是自己差睡眠 还是自己确实是想睡那么久算了 睡都睡了 睡醒了起来看书了(十七)----原创 2022-04-23 13:43:09 · 1553 阅读 · 0 评论 -
从零开始自制实现WebServer(十六)---- 学习新工具CMake自动编写MakeFile 分门别类整理源文件心情愉悦
文章目录前引1、学习新工具 cmake/sh脚本 需要耐心与时间前引感觉自己写Makefile的话 尤其是写到现在 真的感觉不太方便而且如果以后编译大型项目 自己也要用cmake 为了表示我们这个项目比较专业 也是比较正式一点的 我们还是学习用一下Cmake吧然后这个项目写到这里 已经快接近尾声了 我再把书给刷一遍 看有没有什么地方我没有看到 再做一些修改把测试给做了 项目就结束了~这部分先写到这里 去学习一下cmake去啦 哈哈1、学习新工具 cmake/sh脚本 需要耐心与时间写原创 2022-04-21 16:11:02 · 951 阅读 · 0 评论 -
从零开始自制实现WebServer(十五)---- 日志库部分完结啦 实用小件DOUBLE-BUFFERING优化异步写入性能
文章目录前引(十五)---- 日志库部分完结啦 实用小件DOUBLE-BUFFERING优化异步写入性能1、前引大概这部分写完了 我们的WebServer功能的拓展就到此为止了可能写完后 我花时间再把书 认认真真的刷一遍用比较科学 比较严谨的方式最后再把我做的服务器与比较公认的服务器进行性能比较再把一些之前没有注意到的细节给再写写这WebServer系列就要完结啦仔细想想 从一开始到现在 也足足有35天了 天啦… 时间过的好快到现在我也还有好多事情等着去完成 还有好些书要看看这个Web原创 2022-04-20 17:39:05 · 905 阅读 · 0 评论 -
从零开始自制实现WebServer(十四)---- 终最后迈向日志库 解决流输出重载前端基本框架搭建 为异步日记库做好准备
文章目录前引(十四)---- 终最后迈向日志库 实用工具DOUBLE-BUFFER优化日志写入性能前引下午四点一觉睡醒就已经现在6点半了 刷了半小时b站 听了半小时的歌 还看了看某乎 感觉自己离面试还有太多要准备了的没有那么简单 没有那么容易 一切都得自己慢慢准备吧后面感觉自己还得去看很多开源项目 再补充一下自己的网络编程的基础吧 这个项目这部分做完了 也快进入到尾声了 我个人感觉这部分设计的难度 也不会是很难多个前端 一个后端 后端则是采用异步线程写入每隔固定的时间 就写入就好了 如果服务原创 2022-04-18 19:53:50 · 864 阅读 · 1 评论 -
从零开始自制实现WebServer(十三)---- 定时器实现踢掉服务器空闲连接功能 让服务器不再被长连接强行霸占
文章目录前引(十三)---- 利用定时器小根堆 实现踢掉服务器空闲连接功能1、前引这部分实现起来感觉应该还是挺简单的毕竟定时器已经实现了在增加配置后 现在改成6核 12处理器 12GB内存不敢设置16GB内存 虚拟机设置16GB 那我Windows还用不用内存啦怕到时候卡死 算了还是省着来性能明显上升 现在都可以跑到 9w2短链接每秒啦 哈哈想到之前 不停的failed 属实快心酸的眼泪都要出来了 同样配置情况下 没有测试 linya学长的 还有muduo库 没测试…之后测试 去和li原创 2022-04-16 15:51:29 · 1900 阅读 · 0 评论 -
从零开始自制实现WebServer(十二)---- 剑指定时器小根堆处理 给EventLoop定时任务处理一个温暖的家
文章目录前引前引今天属实是纯坐牢的一天但是也好久没上过体育课了 陪朋友去玩一玩中午马师12点Hamble Swag的专辑就又重新上了 哈哈哈 现在每天都依靠着期待 喜欢的歌手出专辑了 5月7号连麻又要上专辑了 这个月我喜欢的建坤可能15gai又要出了 希望能够早点出吧哈哈 这样一想 生活又变的有期待起来了我私以为啊 生活啊 是需要有期待的东西存在的 如果生活失去了期待 连未来的美好都没有期待的话 我可能会一辈子躺在床上不会起来了正因为生活有了期待 我觉得这个才是我生活 起床的源动力 每天都原创 2022-04-15 13:50:41 · 1317 阅读 · 6 评论 -
从零开始自制实现WebServer(十一)---- 花费数天完善代码寻找瓶颈 修修改改代码初具规模 罗列目前全部代码
文章目录前引(十一)---- 花费数天完善代码寻找瓶颈 修修改改代码初具规模 罗列目前全部代码1、主要核心部分代码1、main.cc(无修改)2、httpserver.h(无修改)2、httpserver.cc(无修改)3、tcpserver.h(新增了参数为右值引用的注册回调)3、tcpserver.cc(无修改)4、acceptor.h(包装了设置文件描述符属性函数)4、acceptor.cc(增加了处理文件描述符不够用的情况 优化了部分代码)5、eventloop.h(无修改)5、eventloop.原创 2022-04-12 19:06:16 · 958 阅读 · 1 评论 -
从零开始自制实现WebServer(十)---- 费时五天研究性能瓶颈 对整个服务器代码大改造 最后发现gcc优化竟是最终问题
文章目录前引前引在这些段话的时候 我还没有取第八章的标题因为说实话 我目前的工作模式是和Muduo库默认的工作模式是一样的epoll都是采用水平触发但是进行测试的时候在进行了一番修改后 我发现还是没有起到很好的效果下面是用ab来进行的测试竟然惊奇的发现 在ab的测试工具下 tiny_muduo和muduo的性能竟然是持平的但是感觉ab的模拟并发的能力并没有webbench好…我的电脑风扇都没有转起来… 而且3百万的连接竟然需要4分钟之前我记得用webbench的时候 大概是30原创 2022-04-12 17:35:43 · 1998 阅读 · 0 评论 -
从零开始自制实现WebServer(九)---- 目前总览代码如下 得继续脚步前行
文章目录前引(七)--- 目前总览代码如下 得继续脚步前行 (下)1、主要核心部分代码1、main.cc2、httpserver.h2、httpserver.cc3、tcpserver.h3、tcpserver.cc4、acceptor.h4、acceptor.cc5、eventloop.h5、eventloop.cc6、epoller.h6、epoller.cc7、channel.h7、channel.cc8、tcpconnection.h8、tcpconnection.cc9、buffer.h9、buf原创 2022-04-09 00:33:28 · 1240 阅读 · 1 评论 -
从零开始自制实现WebServer(八)---- 花费两天解决性能瓶颈问题 介绍一路调试历程以及推荐各种好用的工具
文章目录前引(七)---- 继续整改代码 优化代码逻辑(下)前引刚刚在写博客前 想到了好多好多以前自己的往事回想到 其实这一路走过来 真的觉得自己与绝大部分人走过的 小学初中高中都不同 也包括自己的大学回想起来自己原来真的自己也做过好多错事 犯过太多太多错误 也做过很多对不起别人的事情 但是距离真的自己感觉到做了错事的时候 在我记忆中 应该是停留在高二的时间了 距离现在也快三年多四年了有时想想啊 人啊 很多时候做事情真的得三思 思考现在 思考以往 思考未来 也许是这三四年内自己没有在做过什么错原创 2022-04-08 15:26:05 · 2259 阅读 · 0 评论 -
从零开始自制实现WebServer(七)---- 进入首次压力测试开始调优 休整不牢地基开始大整改
文章目录前引(七)---- 回顾代码全部目前实现 进入首次压力测试开始调优前引今天是4/3号了 现在是中午的11:43了 昨天休息了一天 确实不太想出门了 主要是4月1号的时候 晚上忙到了11点 把HTTP部分初步给做出来了 就想自己给自己放一天假过会可以出去吃饭了 和朋友们好久没出去吃饭了 出去聚一聚毕竟这段时间疫情挺严重的 可能也就这段时间能够出去了这篇的话 我想把日记库的部分给初步搞定 毕竟也是网络库中非常核心的一个地方 需要去完成的 本来是想好好的抓一抓细节的 用用unique_ptr原创 2022-04-05 16:34:08 · 1834 阅读 · 3 评论 -
从零开始自制实现WebServer(六)---- 跌跌撞撞奔向HTTP状态机 学习途中拾慧纠正过往细节偏差
文章目录前引(六)横冲直撞朝向HTTP状态机 学习途中拾慧纠正过往细节偏差1、工欲行其事 必先利其器 buffer横空出世前引此时在写这篇博客的时候 还是处在重感冒的状态 头晕头疼 状态还不是很好 /(ㄒoㄒ)/~~ 但想着现在看书估计还是可以的 哎 各位还是做事情前有一个好的身体 再做事情吧这篇博客的话 主要就是 重温一下《Linux多线程服务器编程》前面的几个章节 毕竟现在头疼 让我现在学一些需要深度思考的 需要盘逻辑的 那不如鲨了我吧 现在觉得头这么晕 看一下待会看书还看不看得下去吧 看不下原创 2022-04-01 23:14:06 · 2248 阅读 · 5 评论 -
从零开始自制实现WebServer(五)---- 浅沿芳草鲜花小路静心踱步 拨云见雾终见多线程ThreadPool
文章目录前引(五)---- 浅沿芳草鲜花小路静心踱步 拨云见雾终见多线程ThreadPool前引哎 刚刚真的太难绷了 家人们由于同班同学在为c++课堂上的随机30秒问答题犯愁想着怎么在c++课上拿高分 把综测弄高一点 所以我就答应他 如果有题目来了 就可以发消息给我 我马上看了来做 30秒钟 我还需要马上打开手机 马上点进在线课堂 然后浏览题目 选完后 跟同学发消息 什么答案结果刚刚太难绷住了 一道理论题 复制构造函数的形式是什么四个选项 看到题目 我在脑海中疯狂搜索 什么是复制构造函数 我原创 2022-03-25 19:31:37 · 3100 阅读 · 1 评论 -
从零开始自制实现WebServer(四)---- 长望漫漫路觉应先积跬步 不论精致粗糙先砌小砖小瓦
文章目录前引前引不知道取什么标题了 又觉得标题就应该标新立异一点点 哈哈 原谅我在无趣的生活中为自己写博客找到一点点乐趣 哈哈哈好了 回到正题 其实这一篇呢 我是打算一步步向muduo库靠齐的 但又觉得一下子写不可能分层分的那么清楚 那不妨就先一步步慢慢来 还是从普通的echo server开始...原创 2022-03-23 15:54:26 · 2427 阅读 · 12 评论 -
从零开始自制实现WebServer(三)---- 华山论剑剑指线程池 大刀阔斧终开始阅读源码
文章目录前引前引发愁啊 苦闷啊 好像又回到了刚开始的时候 其实我打算写这个系列博客的主要原因呢 就是像我刚开始写第一篇博客的时候 面对从零开始的时候 我连入手的地方都没有 不知道应该从哪里入手 也就像现在我写下这段话一样…但是呢 不管怎么说我相信这个系列的最后 我是能够完成一个类似muduo的网络库的 毕竟已经开始写这个系列博客了 就是想写一下 一个不知道从哪里入手的初学者而言 是怎么一步一步逐渐有收获的刚刚放下了 那本封面是一个小黑人在击剑的书 我觉得也差不多与他要告别了 尽管之后对于一些底层原创 2022-03-19 17:46:17 · 2713 阅读 · 0 评论 -
从零开始自制实现WebServer(二)---- 勿在浮沙筑高层 摸谈初试进程/线程池与高效并发模型
文章目录前引(二)---- 勿在浮沙筑高层 摸谈线程池与高效并发模型前引话说上一章节谈到了 我们用了 单线程Epoll + non_blocking 做了个简易的echo server 我们还没有摸到多线程/多进程的坎呢其实多线程 多进程 也无非就是 pthread_creater/fork而已 但是需要考虑的东西也就更多了 例如临界区/竞态条件了 race condition 考虑到这个 又要用一些进程间的通信原语去解决问题了 例如mutex cond/pipe sig shm 然后使用这些又需原创 2022-03-17 12:03:37 · 3706 阅读 · 1 评论 -
从零开始自制实现WebServer(一)---- 万丈高楼平地起 步子得一步一步慢慢走
文章目录前引(一)万丈高楼平地起 步子得一步一步慢慢走前引鉴于笔者走的路线是 Linux后端开发 而且现在处于正在起步的阶段而且发现网上对于 linux后端开发的项目 真的如何从零开始起步的文章太少了 所以笔者打算就从这篇开始 写一个后端刚起步的小白 慢慢一步步成长学习的路吧当然 这肯定是会写一个系列的 最后的完结目标 是实现一个 底层实现思路类似于陈硕大佬的muduo网络库 基于基层网络库的框架之上 再实现出一个高性能静态http并发的服务器 这个也会是作为之后实习的项目而做的毕竟后端开发原创 2022-03-15 16:40:55 · 9204 阅读 · 3 评论