基于epoll的单进程Reactor服务器

服务器结构图

对以上结构图作出如下解释:

  • ReactorSever中需要维护所有连接,由于服务器每一次读取缓冲区时不一定能读取到完整的报文(只有读取到完整报文才能做相应处理);每一次向缓冲区写数据时也不一定能写进去(写缓冲区满),因此对于每个链接都需要维护一对读写缓冲区,所以ReactorSever维护的不单单是fd,而是一个包含了fd、读写缓冲区的connection对象。除此之外,还可以把该链接关心的事件也存放进去。
  • 我们都知道对于listen套接字和普通套接字的处理是不同的(一个是获取链接另一个是读取数据),为了服务器的的统一性,我们给listen连接和普通连接增加一层抽象层------connection,至此,ReactorSever的眼里只有connection。给connection注册不同的方法(通过继承或者是组合)就可以实现listen套接字和普通套接字的区别对待。
  • 对于普通连接来说,还需要应用层(http协议)处理,最后进行业务处理。

服务器的实现

无小道/linux_112

相关推荐
CSDN_RTKLIB2 小时前
对象类型转换与引用类型转换
c++
qq_395716172 小时前
服务器加硬盘应该用 RAID 几好?
运维·服务器
EverydayJoy^v^2 小时前
RH134学习进程——四.归档和传输文件
服务器·前端·网络
weixin_462446232 小时前
ubuntu / kali 将 /dev/sdb1 安全挂载为 /home 的完整实战指南(避坑版)
运维·安全·ubuntu
线束线缆组件品替网2 小时前
服务器高速互连测试中的 CableMAX 高速线缆实践
运维·服务器·人工智能·自动化·硬件工程·材料工程
破烂pan2 小时前
SGLang 服务器启动参数完整总结
运维·服务器·sglang
Kaede62 小时前
如何判断服务器遭受过CC攻击?
运维·服务器
skywalk81632 小时前
阿里云的esc云服务器安装FreeBSD是否支持zfs文件系统
服务器·阿里云·云计算·freebsd
是娇娇公主~2 小时前
C++集群聊天服务器(4)——网络模块与业务模块
服务器·网络·c++