- 使用Socket + pthreadpool + epoll IO 多路复用,实现server高并发
- http 服务器使用cgi程序,处理动态页面请求o
- 使用 C++ 封装 Socket 线程池模型 Epoll 模型 Http协议
主线程负责所有I/O操作,收其一个请求所有数据之后,交给工作线程进行处理。 处理完成之后,把需要写回的数据还给主线程去发送给客户端,
epoll_wait()等待事件的发生,判断是否为新的套接字,如果是添加到任务队列 如果套接字可读,将数据读出,并传给子线程处理,子线程处理完成后,会把数据发送给主线程, 主线程调用epoll_ctl() EPOLL_CTL_MOD将套接字设置成EPOLLOUT,然后 调用send(),发送给客户端,待数据发送完毕,关闭套接字。
参考tinyhttp源码 tinyhttp 是一款轻量级的web服务器,只有500行代码,本项目对http进行改造, tinyhttp 调用recv(),每次只读取一个字节,本项目将http请求的所有内容一次性全部读取,再分别 进行处理. 并使用 c++ 进行封装,
当web服务器请求动态页面,使用fork() 派生成子进程, 子进程执行 execve(), 父进程 和子进程采用管道进行通信,在子进程中 使用dup2()将写端重定向到STDOUT, 读端重定向 到STDIN, 本项目采用python3脚本进行测试