前言
跟着教学实现了简单的基于epoll I/O多路复用的Echo服务器,跟的时候真的云里雾里,仔细总结才发现,系统编程和网络编程基础真的太有用了,不懂基础真的举步维艰。前路漫漫呀。
主要构成
1、线程池
① 循环任务队列
包括了锁(互斥同步)、条件变量(观察者模式)、init、push(加锁操作)、pop(加锁操作)。
有任务push到队列中时,就会通过条件变量告知线程。
② 线程
线程工作函数 线程的工作就是从任务队列中取任务,这里就是取fd。
获取fd后线程的处理函数 recv读数据,send发数据。
2、 基于epoll实现的I/O多路复用
epoll_create 返回epollfd
epoll_ctl 增删改 epollfd 中的fd
epoll_wait 查epollfd中ready的fd 放入events中
EPOLLET 边缘触发模式 需要设置非阻塞I/O
3、网络编程(服务端)
socket 返回sockfd
bind 绑定sockfd 和 (IP + port)
listen 监听sockfd 可设置监听最大上限
accept 接收三次握手后建立的连接,新的sockfd
recv 收数据
send 发数据
close 关闭连接,发起四次挥手?
4、文件控制
①设置非阻塞
flags = fcntl(fd, F_GETFL); //获取状态
flags = O_NONOBLOCK;
fcntl(fd, F_SETFL,flags); //设置状态
② 文件加锁 未涉及
③ 复制文件描述符 未涉及