✅ 队列多线程
使用方法如下:
pi@centos:~/yadihttpd$ ./yadihttpd
usage: ./yadihttpd <port> <websit root> <log dir>
要提前创建好文件夹和响应静态文件
如:./yadihttpd 80 /home/pi/www /home/pi/yadihttpdlog
pi@centos:~/yadihttpd$ sudo ./yadihttpd 80 /home/pi/www /home/pi/yadihttpdlog
应设置euid, 如:chmod u+s ./yadihttpd
示例博客项目:博客文件树
0.1版本完成的功能:
✅ 打印日志,读取消息头,日志文件名根据时间生成
✅ epoll版本并返回相应文件
✅ 日志队列,自动切换,写日志单独线程
✅ 大文件支持
✅ 文件读取权限限制
✅ 简易博客
显示具体行号,函数,文件名
查看日志线程:
日志线程一般睡眠状态(队列空,代表不忙,释放锁,阻塞一秒)。
🔴 访问链接前日志:
🟢 访问链接后日志:
🟢 日志记录一定条数时(如5000),自动切换文件。
📚 图片读取
📚 大文件支持 (may be some bugs)
epollout处理缓冲区、设置非阻塞fd, 服务器可以同时处理多个请求。
📚 服务器文件根目录布局
pi@raspberrypi:~/www $ tree
.
├── blog # marked转换之后的博客
│ ├── linux_notes.html
│ └── test.html
├── css
│ ├── my.css
│ └── prism.css # 代码高亮等等
├── img
│ ├── 1.jpg
│ ├── eg_tulip.jpg
│ ├── lake.jpg
│ └── log.jpg
├── index.html
├── js
│ └── prism.js # 代码高亮等等
└── md # 初始markdown形式
├── linux_notes.md
├── md2html.sh #批量转换脚本 md->html
├── test.md
└── tmp.mdfile
所用到库:
marked:markdown -> html
prismjs: 代码高亮等布局
🔍 fd泄露排查
是有地方忘了close了。测试了一会,如下图,貌似没有fd泄露的问题了,但是还有个偶尔段错误还没查出来。
🔍 段错误排查
🔍 url过长:感谢大晚上测试我网站的恶意程序
🔍 url直接访问目录错误修复,同上。
一个accpet线程,一个日志线程,三个子线程处理请求,每秒请求每个核大概1400。