基于epoll的单进程Reactor服务器

服务器结构图

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

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

服务器的实现

无小道/linux_112

相关推荐
2401_8920709810 小时前
【Linux C++ 日志系统实战】LogFile 日志文件管理核心:滚动策略、线程安全与方法全解析
linux·c++·日志系统·日志滚动
雪可问春风10 小时前
docker环境部署
运维·docker·容器
yuzhuanhei10 小时前
Visual Studio 配置C++opencv
c++·学习·visual studio
lwx91485210 小时前
Linux-Shell算术运算
linux·运维·服务器
翻斗包菜10 小时前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
somi711 小时前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
不爱吃炸鸡柳11 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发11 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
海的透彻11 小时前
nginx启动进程对文件的权限掌控
运维·chrome·nginx
‎ദ്ദിᵔ.˛.ᵔ₎11 小时前
STL 栈 队列
开发语言·c++