linux网络编程:epoll+reactor实现文件下载服务器

想来学习linux下的网络编程已经有一段时间了,于是写了这样一个文件下载服务器来复习总结一下。回想起来这段学习历程,从最开始的回声服务器,到后来的多路I/O复用,再到后来的多进程、多线程、线程池服务器,这一路走来感觉编程的世界真是其乐无穷。好了,废话到此为止。

××××××××××××××××××××××我是分割线×××××××××××××××××××××××××××××××××××××××

项目版本0.0地址: https://github.com/maybe4271/http_server

只实现了最基本的epoll模块、http_handle模块和储存客户端请求报文的链表模块,下一步计划是添加心跳模块,日志模块和配置文件。

程序的运行逻辑:
项目的工作逻辑是客户端(web服务器)发送请求报文->服务器端epoll监听到客户端读事件->将该该文件描述符从树上摘下->调用相应的回调函数,如果是第一次的话(判断是否在树上)则建立连接,并将新连接的客户端注册到epoll监听的红黑树上,否则处理读数据事件->处理事件(接收请求报文,解析报文并存储到链表尾)->注册写事件->等待写事件触发->写事件触发,将文件描述符从树上摘下->处理事件(发送数据)->注册读事件->循环。

大致是从libevent的epoll模块修改而来的,多线程版本就是开多个线程,每个线程里面有一个epoll,服务器端套接字在第一个epoll里面,服务器端监听到客户端套接字发起连接请求的时候,就将他加到其他的epoll里面,要注意线程间的同步。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值