cen's blog cen's blog
首页
  • 编程文章

    • markdown使用
  • 学习笔记

    • C++学习
    • C++数据结构
    • MySQL
    • Linux
    • 网络编程
算法
  • Git
  • ProtoBuf
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

cen

十年饮冰,难凉热血
首页
  • 编程文章

    • markdown使用
  • 学习笔记

    • C++学习
    • C++数据结构
    • MySQL
    • Linux
    • 网络编程
算法
  • Git
  • ProtoBuf
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Linux环境搭建
  • 基本指令
  • 权限
  • Linux基础开发工具
  • 进程概念
  • 进程控制
  • 基础IO流
  • 动态库和静态库
  • 进程通信
  • 进程信号
  • 多线程
  • 线程安全
  • 生产者消费者
  • 线程池
  • 高级IO
  • 多路转接epoll
  • Reactor
    • 演进
    • 单 Reactor 单进程
    • 单 Reactor 多进程
    • 多 Reactor 多进程
    • 好的网络服务器设计
  • Linux
cen
2025-09-27
目录

Reactor

# 演进

为了让服务端为多个客户端提供服务,最容易想到的就是为每一个客户端创建一个线程/进程(线程较进程更加轻量化)。然而对客户端的连接和关闭就是对线程的创建和销毁,这样开销较大,所以使用线程池技术实现资源复用,减小成本,再使用 IO 多路转接用一个线程监视所关心 socket 的读写准备,高效的处理业务。
基于面向对象的思想,对多路转接进行封装而不需要考虑底层 api 的细节,直接关注应用代码的编写,即 Reactor 模式,一种将就绪事件派发(Dispatcher)给对应服务处理程序的事件设计模式。
Reactor 模式主要由 Reactor 和处理资源池这两个核心部分组成:

  • Reactor 负责监听和分发事件,事件类型包含连接事件、读写事件、异常事件;
  • 处理资源池负责处理事件

# 单 Reactor 单进程

  • Reactor 对象通过 select (IO 多路复用接口) 监听事件,收到事件后通过 dispatch 进行分发,具体分发给 Acceptor 对象(建立连接)还是 Handler 对象(请求处理),还要看收到的事件类型;
  • 如果是连接建立的事件,则交由 Acceptor 对象进行处理,Acceptor 对象会通过 accept 方法 获取连接,并创建一个 Handler 对象来处理后续的响应事件;
  • 如果不是连接建立事件, 则交由当前连接对应的 Handler 对象来进行响应;

# 单 Reactor 多进程

# 多 Reactor 多进程

# 好的网络服务器设计

上次更新: 2025/11/11, 22:03:54
多路转接epoll

← 多路转接epoll

最近更新
01
动态规划
11-08
02
ProtoBuf
09-28
03
Git
09-28
更多文章>
Theme by Vdoing | Copyright © 2024-2025 京ICP备2020044002号-3 京公网安备11010502056119号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式