在Linux平台下,用C++封装了std::thread,socket,epoll等内容,实现了支持格式化输出的同步日志,以及在封装std::thread的基础上实现了线程池。并初步实现了Reactor模型的Web服务器,目前正在逐步调试和优化。
- 利用C++标准库的stream流式输入输出、实现了支持格式化同步记录日志;
- 对C++标准库中std::thread进行进一步封装为Thread,为适应服务器要求,增加了线程名和启动时间等信息;
- 在Thread的基础上C++11新特性实现了可以指定线程容量的线程池ThreadPool;
- 对Linux下的socket进行封装,将socket相关的bind listen send等函数封装到Socket内部,从而实现了面向对象的Socket类;
- 对Linux下的epoll进行封装,实现了面向对象的epoll创建,描述法添加和监听等功能;
- 利用std::vector<char>封装了自动增长的读写缓存区Buffer;
- 利用正则表达式和状态机实现了Http请求报文的解析和响应报文的生成;
- 利用Epoll(ET)和ThreadPool实现了Reactor高并发模型。
- Linux
- C++11
├── build
├── CMakeLists.txt
├── debug
├── include 头文件
│ ├── Buffer.h
│ ├── Epoll.h
│ ├── HttpConnection.h
│ ├── Log.h
│ ├── Reactor.h
│ ├── Socket.h
│ ├── Thread.h
│ ├── ThreadPool.h
│ ├── Timer.h
│ └── WebServer.h
├── log 日志
├── resources 静态资源
│ ├── images
│ ├── music
│ ├── video
│ ├── css
│ ├── js
│ ├── fonts
│ ├── index.html
│ ├── login.html
│ ├── music.html
│ ├── picture.html
│ ├── register.html
│ ├── video.html
│ └── welcome.html
└── src 源文件
├── Buffer.cpp
├── Epoll.cpp
├── HttpConnection.cpp
├── LogAppender.cpp
├── Logger.cpp
├── LogLayout.cpp
├── LogManager.cpp
├── main.cpp
├── Reactor.cpp
├── Socket.cpp
├── TestLog.cpp
├── TestThreadPool.cpp
├── Thread.cpp
├── ThreadPool.cpp
├── Timer.cpp
└── WebServer.cpp
~/Heeb$ cmake ..
~/Heeb/build$ make
~/Heeb$ ./build/WebServer
- 增加日志的异步记录功能,采用无锁队列进行记录
- 调试完善服务器的各项基本功能,并进行压力测试
- 增加mysql数据库部分,实现注册、登陆等功能
Linux高性能服务器编程,游双著
Unix网络编程 卷1 套接字联网API, W.Richard Stevens等著
感谢下面大佬的代码参考和静态资源
@markparticle
@qinguoyi
@lzpong
@sylar-yin
