基于 C++ 11 实现的 Web 服务器

本人参照《Linux多线程服务端编程》,以及模仿该书使用的muduo,写了一个轻量的 Web 服务器。

源码

Github。代码中有比较详细的注释,可作为看《Linux多线程服务端编程》的辅助材料。

已完成

  • 完成基本的Tcp(被动连接)库;
  • 简易的HTTP服务器,可访问主页HTML和网站favicon图标。

技术

  • 主从 reactor 模式:

    • 主 reactor 负责监听连接,当有新的连接,accept 到新的 socket 后,使用 Round Robin 方法选择从 reactor,将 socket 派发给从 reactor;
    • 从 reactor 负责管理时间描述符(timerfd用于定时任务)、事件描述符(eventfd 用于唤醒 IO 线程)和 派发过来的 socket 文件描述符。
  • multiple reactors + thread pool (one loop per thread + threadpool);
  • EventLoop:使用 Epoll 水平触发的 IO 多路复用技术,非阻塞 IO;
  • 线程池:

    • 使用多线程能发挥多核的优势;
    • 线程池可以避免线程的频繁地创建和销毁的开销。
  • 简单的日志系统;
  • 使用智能指针等 RAII 机制,来为降低内存泄漏的可能性;

并发模型

并发模型为 multiple reactors + thread pool (one loop per thread + threadpool); + 非阻塞 IO,新连接使用 Round Robin 策略派发。

压测

压测结果。

参考

  • 《Linux多线程服务端编程》
  • muduo
  • 陈硕老师的Blog
  • linyacool的WebServer
  • uv-cpp
  • 开源HTTP解析器
  • HTTP请求和响应格式
  • 写一个并发http服务器(有代码)
  • 有什么适合提高 C/C++ 网络编程能力的开源项目推荐? - Variation的回答 - 知乎(master/worker、proactor 等 IO 模型)
  • Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程
  • 网络编程中的关键问题总结
  • muduo源码剖析 - cyhone的文章 - 知乎
  • Muduo 源码分析

你可能感兴趣的:(网络编程,linux编程,c++)