C++从0实现Reactor高并发网络服务器 复习与回顾(1)
(4)增加Channel类:
将Channel对象的地址作为epoll_event结构体携带的数据。
并将一系列和epoll事件相关的代码都封装到Channel类中。
(5)第一次添加回调:
在封装好的Channel类的handleevent函数中,我们判断事件是不是监听的fd有事件(新客户端连上来),或者是客户端连接的的fd有事件。这里只有2中情况,我们可以if else来写,但是情况多就复杂了,并且只能写死,无法实现定制的功能。
在这里我在Channel类中建了两个回调函数,分别对应服务端Channel的新连接,和客户端Channel的事件(过来的消息)。
(6)增加EventLoop类:
把服务端的Epoll和事件循环部分的代码封装成EventLoop类,代码更简洁。
此时EventLoop类中和Channel类中,都有Epoll类型的成员变量。(这里因为Channel类中需要Epoll,并且Channel和Epoll是多对一,Channel和EventLoop也是多对一)因此我们把Channel类中Epoll变量换成EventLoop类对象。
(7)增加TcpServer类:
现在在服务端程序中,一些代码啰里啰嗦的,我将其封装为TcpServer类,传进去服务端的地址和协议,并运行事件循环。这样代码更加模块化和简介。