高性能HTTP服务器:设计和思路
设计需求
- reactor模型,可以灵活使用ppoll/epoll事件分发机制
- 主从 reactor模型加线程池模式。将连接和读写分离
- http协议内容解析
大概可以分为这三块进行实现。
主从Reactor模型设计:
主反应堆一直在感知连接建立事件,如果有连接成功建立,主反应堆线程通过accept方法获取已链接套芥子,按照一定算法选取一个从反应堆线程,并把链接号的套接字加入到这个反应堆线程中
主反应堆只负责获取套接字加入到从反应堆中,像是在客栈外面拉皮条的人。
Reactor组成元素
- event_loop
主线程所在的无限事件循环,一旦事件发生,将回调事件函数进行处理(epoll select poll等待)
- channel(event)
注册的对象,我们使用channel表示,例如监听事件,读写事件套接字
- acceptor
服务器监听器,监听channel对象 注册在event_loop中
- event_dispatcher
IO多线程模型
- threadpool
线程池,维护活跃线程列表,当有链接,将分配给一个合适的线程进行操作
- event_thread_loop
线程单元,对连接套接字进行读写操作。
对事件进行处理的行为