TinyWeb--C++构建高性能Web服务器
C++构建高性能Web服务器——Step 0:前言
一、想法:
- 一直想用C++做个项目,因为比较喜欢网络通信这部分,又让事情变得更有些挑战性,我最终选择实现一个高性能的Web服务器。
在宏观上我希望TinyWeb能够这样:
- 配置简单
- 扩展容易
- 性能高效
- 功能强大
并希望在开发的过程中能够掌握以下知识:
- Unix环境编程的技能
- Unix网络编程的技能
- 巩固C++11知识
- 掌握构建大型C++项目的技能
- 掌握多进程、多线程同步、通信机制
- 实现高性能可复用Memory-pool
- 掌握基本的数据结构(红黑树、链表、Hash)
- 能够把通用的网络部分作为单独的网络库、为以后网络开发提升效率
TinyWeb 目前的功能是:
- 基本的Web服务,只能提供静态网页服务。
- 单进程+Reactor+非阻塞方式运行
- 只能用于Linux系统,不专注跨平台
- 基本的Web服务配置
TinyWeb 目前的发展计划:
- 使用进程池的方式提高并发性
- 强有力的支持多种版本Http协议
- 负载均衡功能
- 代理功能
二、设计思想
1. 网络中最麻烦的是如何处理阻塞的事件:
如果IO事件没有发生,系统阻塞的等待IO事件发生,那么CPU就被
浪费了,为实现高并发,不能让进程阻塞,CPU等待IO事件.
借助Linux高效的Epoll机制,
至于为何使用Epoll,而不使用Select或Poll,点这里看看吧.
2.为了提高并发性:到底是选择多进程还是多线程模式
多进程与多线程各有优缺点,并且大部分是互补的,具体就不再赘述了,
详情请戳这里
我选择多进程的原因是:
- 安全性高,一个进程崩溃不会影响别的进程
- 容易调试,不易造成死锁
- 有较为成熟的进程间通信同步机制(共享内存,信号,文件锁,socketpair....)
在接受客户端连接的时候,如何再去创建一个进程,效率低下.故因此采用进程池的方式:
Master进程为父进程,主要控制子进程的状态;可动态配置数量的Slave子进程,用于接受连接,
处理Http逻辑.
3.C++最难管理的还是内存
为了方便的进行内存管理,我设计了一个内存池,不会产生大量的内存碎片,性能待测试.以后还会
介绍如何实现的,尽请期待.
4.进程间通信的方式很多,到底选择哪几个
了解了下Nginx,有考虑了使用的复杂度,我决定使用这几个通信.同步机制
- 原子操作
- 信号量
- 消息队列
- 共享内存
- 信号
三、源码
想要源代码的请戳这里,希望大家多多对代码风格做出评判,毕竟自己只是个大三的学生.
四、参考文献
小伙伴想要了解更多的高性能的网络编程,推荐一个大神的专栏
TinyWeb--C++构建高性能Web服务器相关推荐
- LEMP构建高性能WEB服务器(第三版)
LEMP 自动化编译脚本下载:http://docs.linuxtone.org/autoinstall/ (定期更新,欢迎多测试,找bug) 介绍参考:http://bbs.linuxtone.or ...
- [nginx] LEMP构建高性能WEB服务器(第三版)
LEMP 自动化编译脚本下载:http://docs.linuxtone.org/autoinstall/ (定期更新,欢迎多测试,找bug) 介绍参考:http://bbs.linuxtone.or ...
- 《构建高性能web站点》随笔 无处不在的性能问题
前言– 追寻大牛的足迹,无处不在的"性能"问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡. ...
- 构建高性能WEB站点笔记二
构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- 《构建高性能Web站点》观后感
最近琐事繁忙,做了一个项目,累死3个搓澡工.所以读书也就少多了,深深表示遗憾,以后得增加阅读和学习.最近走马观花的看了一本<构建高性能Web站点>(郭欣 著).做一下简单的记录,一方面方便 ...
- rails 构建高性能web
[CSDN现场报道]2010年12月9日,年度收官技术盛宴SD2.0大会在上海光大会展中心国际大酒店隆重开幕.这是自2007年成功举办首届以来,由CSDN和<程序员>杂志主办的连续第四届S ...
- SD2C:CSDN产品总监范凯——用Rails构建高性能Web应用
2010年的SD大会已经结束两个星期了,官方的PPT说是出来了,却不让下载(提示用户名密码错误),让人感觉这1800大洋花的很有些怨气.最可恨的是,官方提供的现场演讲实录整理的实在不敢恭维,要想在团队 ...
- Warp : Haskell 的高性能 Web 服务器(译文)
Warp : Haskell 的高性能 Web 服务器(译文) 按 GHC 7.8 马上就要发布了.一个很大的改进就是加入了本文所说的并行 IO 管理器.从此之后 Haskell 在高性能服务器领域将 ...
- nginx高性能WEB服务器系列之九--nginx运维故障日常解决方案
nginx系列友情链接: nginx高性能WEB服务器系列之一简介及安装 https://www.cnblogs.com/maxtgood/p/9597596.html nginx高性能WEB服务器系 ...
最新文章
- spring中的ReflectionUtil
- Android Studio获得sha1码
- 计算机基础:离散数学和完备性
- 1106 Lowest Price in Supply Chain (25)
- Designer设计无代码工作流
- 与指定数字相同的数的个数(信息学奥赛一本通-T1102)
- Node.js + React + MongoDB 实现 TodoList 单页应用
- HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
- Google Earth Engine ——消除影像色差直方图匹配算法(CDF累计分布函数)!
- Python POST 修改某计步APP的数据
- 使用librosa库对音频信号进行采样以及分帧处理
- 清理浏览器html缓存图片吗,浏览器怎么清除缓存
- 将指定小程序页面设置为首页的两种方式
- Error: Cannot find module 'util-deprecate'
- 使用SSH密钥连接阿里云linux服务器
- 此为四川大学110周年校庆大型文艺晚会朗诵文稿
- Tensorflow训练的模型,如何保存与载入?
- 西门子1200PLC和Modbus485从站设备通讯
- 9个非常有意思的HTML5动画推荐
- 系统可用性SLA指标
热门文章
- 149.直线上最多的点数
- 信道模型时延和路径增益:cost207,cost2100,cost259,cost273,SCM,I-METRA,WINNER II
- 分步表单_后台产品设计之表单页设计
- 最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
- 【概率论】期望、方差、协方差、相关系数、相关与独立、样本估计量、点估计、区间估计
- 计算机图形学完整笔记(四):消隐
- 使用MagicRecon在挖洞时最大化数据收集量
- C语言合法常量123L,C语言综合习(最终版).doc
- blender 上一步 下一步_下一步是模拟宇宙
- linux下安装共享软件,Linux 系统下各种包的安装方法分享