Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

EasyCommanderZ/EasyServer

Repository files navigation

EasyServer

GitHub

EasyServer 是使用 C++ 17 标准开发的轻量级Web服务器。

项目特点

  • 基于 C++ 17 标准开发,使用标准库提供的智能指针或将类按照RAII方式来设计,降低内存泄漏的可能。
  • 使用 线程池 + 非阻塞 Socket + Epoll (ET) + Reactor模式的并发模型。主线程作为 Acceptor 接受请求,并分发给其他事件处理线程。详情见 并发模型
  • 使用基于标准库优先队列 (Priority_Queue) 实现的定时器关闭超时请求,采用惰性删除。
  • 使用 eventfd 实现了线程的异步唤醒。
  • 实现了一个简单的异步日志模块,使用链式缓冲。
  • 使用状态机解析 HTTP 请求。

项目结构

src
├── Http // 提供 HTTP 中连接和读写事件的处理功能
├── Log // 日志模块
├── Reactor // 事件处理模块
├── Server // 服务器模块,作为 Acceptor 处理连接,分发事件
├── Thread // 线程池、线程信息获取
└── Util // 工具类

开发环境

仅列出我的开发环境以供参考。

  • OS : Debian 4.19.146-1 (2020年09月17日) x86_64 GNU/Linux ( Debian 10.12 )
  • Compiler : GCC 8.3.0 x86_64-linux-gnu
  • CMake : 3.13.4 ( set minimum required version to 3.12 in CMakeLists )

由于使用了 Epoll,目前仅能在符合工具版本条件的 Linux 环境上进行完整编译。Log 部分在 macOS上开发,即 Log 部分确保可以在符合条件的 macOS 环境上编译运行。下面列出我在 macOS 的开发环境以供参考。

  • OS : macOS Monterey 12.4+, Apple M1
  • Compiler : Clang 13.1.6 arm64-apple-darwin 21.4.0
  • CMake : 3.23.2+

未来期望完成 EasyServer 的跨平台实现。

编译

./build.sh

或者使用CMake:

cmake -B build
cd build
cmake --build .

推荐使用 VSCode 的 CMake Tools 拓展。

测试

测试对 EasyServer 进行了功能测试与性能测试,并使用 Valgrind 进行了内存检查。

测试结果见 TestResult。未来更多和测试有关的文档见 ./docs/Tests

文档

docs 中,记录了项目中模块设计与实现的一些思路、问题和细节,也有一些项目过程中的学习、感受和思考,希望对于和我一样的学习者有所帮助。

代码量统计

codeCount

致谢

参考的项目有很多,记录在 开始Coding之前 的最后。非常感谢这些无私的开源作者!

About

C++ 17 based web server.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /