hydrogen,即氢气。hydrogenWeb是一个linux下的轻量、高性能Web Server,内部使用自建的网络库。项目基于C++17/CMake/GTest开发。
首先确认安装如下依赖:
- gcc 7.x/clang 8.x
- CMake 3.10.x
- GTest 1.10
- SQLite 3
mkdir build
cd build
cmake ..
make
./build/application/hydrogenWeb_demo <port> [numThreads: default=0]
与其他网络库的对比,请看性能测试。
大体上的思路请看这里的设计思路。具体细节的分析请看细节探讨。
这里简述了一些想法和目的。
- 为Linux增加epoll的支持,在某些应用场景下能有比poll更好的性能
- 增加用于处理CPU密集型任务的计算线程池,为计算型服务提供便利
- 异步日志系统(现阶段直接使用spdlog输出日志)
- 更加完善的数据库支持(初步支持sqlite3)
- 增加更加完整的性能测试(现阶段由于测试用的电脑无法提供比较多的核心,无法测试双线程以上的应用场景)
- 覆盖更多路径的测试
- 完善连接管理
- 支持使用配置文件搭建服务器
出现的问题会反馈在Issues中。
- CMU ICS course
- Computer Systems: A Programmer's Perspective, 3/E (CS:APP3e)
- 《Linux多线程网络编程》
- Unix Network Programming: The Sockets Networking API
- The Linux Programming Interface
- The C Programming Language, 2/E
- C++ Primer, 5/E
- muduo - Event-driven network library for multi-threaded Linux server in C++11
- libev - Full-featured high-performance event loop loosely modelled after libevent
- Netty project - an event-driven asynchronous network application framework
- Tiny HTTPd