基于epoll的单进程Reactor服务器

服务器结构图

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

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

服务器的实现

无小道/linux_112

相关推荐
端平入洛1 天前
auto有时不auto
c++
Rockbean1 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
蝎子莱莱爱打怪1 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
茶杯梦轩1 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
海天鹰2 天前
【免费】PHP主机=域名+解析+主机
服务器
DianSan_ERP2 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
哇哈哈20212 天前
信号量和信号
linux·c++
多恩Stone2 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
呉師傅2 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
不是二师兄的八戒2 天前
Linux服务器挂载OSS存储的完整实践指南
linux·运维·服务器