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.为了提高并发性:到底是选择多进程还是多线程模式

多进程与多线程各有优缺点,并且大部分是互补的,具体就不再赘述了,
详情请戳这里
我选择多进程的原因是:

  1. 安全性高,一个进程崩溃不会影响别的进程
  2. 容易调试,不易造成死锁
  3. 有较为成熟的进程间通信同步机制(共享内存,信号,文件锁,socketpair....)

在接受客户端连接的时候,如何再去创建一个进程,效率低下.故因此采用进程池的方式:
Master进程为父进程,主要控制子进程的状态;可动态配置数量的Slave子进程,用于接受连接,
处理Http逻辑.

3.C++最难管理的还是内存

为了方便的进行内存管理,我设计了一个内存池,不会产生大量的内存碎片,性能待测试.以后还会
介绍如何实现的,尽请期待.

4.进程间通信的方式很多,到底选择哪几个

了解了下Nginx,有考虑了使用的复杂度,我决定使用这几个通信.同步机制

  • 原子操作
  • 信号量
  • 消息队列
  • 共享内存
  • 信号

三、源码

想要源代码的请戳这里,希望大家多多对代码风格做出评判,毕竟自己只是个大三的学生.


四、参考文献

小伙伴想要了解更多的高性能的网络编程,推荐一个大神的专栏

TinyWeb--C++构建高性能Web服务器相关推荐

  1. LEMP构建高性能WEB服务器(第三版)

    LEMP 自动化编译脚本下载:http://docs.linuxtone.org/autoinstall/ (定期更新,欢迎多测试,找bug) 介绍参考:http://bbs.linuxtone.or ...

  2. [nginx] LEMP构建高性能WEB服务器(第三版)

    LEMP 自动化编译脚本下载:http://docs.linuxtone.org/autoinstall/ (定期更新,欢迎多测试,找bug) 介绍参考:http://bbs.linuxtone.or ...

  3. 《构建高性能web站点》随笔 无处不在的性能问题

    前言– 追寻大牛的足迹,无处不在的"性能"问题. 最近在读郭欣大牛的<构建高性能Web站点>,读完收益颇多.作者从HTTP.多级缓存.服务器并发策略.数据库.负载均衡. ...

  4. 构建高性能WEB站点笔记二

    构建高性能WEB站点笔记 因为是跳着看的,后面看到有提到啥epoll模型,那就补充下前面的知识. 第三章 服务器并发处理能力 3.2 CPU并发计算 进程 好处:cpu 时间的轮流使用.对CPU计算和 ...

  5. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

  6. 《构建高性能Web站点》观后感

    最近琐事繁忙,做了一个项目,累死3个搓澡工.所以读书也就少多了,深深表示遗憾,以后得增加阅读和学习.最近走马观花的看了一本<构建高性能Web站点>(郭欣 著).做一下简单的记录,一方面方便 ...

  7. rails 构建高性能web

    [CSDN现场报道]2010年12月9日,年度收官技术盛宴SD2.0大会在上海光大会展中心国际大酒店隆重开幕.这是自2007年成功举办首届以来,由CSDN和<程序员>杂志主办的连续第四届S ...

  8. SD2C:CSDN产品总监范凯——用Rails构建高性能Web应用

    2010年的SD大会已经结束两个星期了,官方的PPT说是出来了,却不让下载(提示用户名密码错误),让人感觉这1800大洋花的很有些怨气.最可恨的是,官方提供的现场演讲实录整理的实在不敢恭维,要想在团队 ...

  9. Warp : Haskell 的高性能 Web 服务器(译文)

    Warp : Haskell 的高性能 Web 服务器(译文) 按 GHC 7.8 马上就要发布了.一个很大的改进就是加入了本文所说的并行 IO 管理器.从此之后 Haskell 在高性能服务器领域将 ...

  10. nginx高性能WEB服务器系列之九--nginx运维故障日常解决方案

    nginx系列友情链接: nginx高性能WEB服务器系列之一简介及安装 https://www.cnblogs.com/maxtgood/p/9597596.html nginx高性能WEB服务器系 ...

最新文章

  1. spring中的ReflectionUtil
  2. Android Studio获得sha1码
  3. 计算机基础:离散数学和完备性
  4. 1106 Lowest Price in Supply Chain (25)
  5. Designer设计无代码工作流
  6. 与指定数字相同的数的个数(信息学奥赛一本通-T1102)
  7. Node.js + React + MongoDB 实现 TodoList 单页应用
  8. HDOJ 1755 - A Number Puzzle 排列数字凑同余,状态压缩DP
  9. Google Earth Engine ——消除影像色差直方图匹配算法(CDF累计分布函数)!
  10. Python POST 修改某计步APP的数据
  11. 使用librosa库对音频信号进行采样以及分帧处理
  12. 清理浏览器html缓存图片吗,浏览器怎么清除缓存
  13. 将指定小程序页面设置为首页的两种方式
  14. Error: Cannot find module 'util-deprecate'
  15. 使用SSH密钥连接阿里云linux服务器
  16. 此为四川大学110周年校庆大型文艺晚会朗诵文稿
  17. Tensorflow训练的模型,如何保存与载入?
  18. 西门子1200PLC和Modbus485从站设备通讯
  19. 9个非常有意思的HTML5动画推荐
  20. 系统可用性SLA指标

热门文章

  1. 149.直线上最多的点数
  2. 信道模型时延和路径增益:cost207,cost2100,cost259,cost273,SCM,I-METRA,WINNER II
  3. 分步表单_后台产品设计之表单页设计
  4. 最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
  5. 【概率论】期望、方差、协方差、相关系数、相关与独立、样本估计量、点估计、区间估计
  6. 计算机图形学完整笔记(四):消隐
  7. 使用MagicRecon在挖洞时最大化数据收集量
  8. C语言合法常量123L,C语言综合习(最终版).doc
  9. blender 上一步 下一步_下一步是模拟宇宙
  10. linux下安装共享软件,Linux 系统下各种包的安装方法分享