从零手写高性能 C++ TCP 服务器框架(二):名词介绍

从零手写高性能 C++ TCP 服务器框架(二):名词介绍

一、HTTP服务器

HTTP(Hyper Text Transfer Protocol),超文本传输协议是 应用层协议,是一种简单的请求 - 响应协议 (客户端根据自己的需要向服务器发送请求,服务器针对请求提供服务,完毕后通信结束)。

需要注意:HTTP协议是一个运行在 TCP 协议之上的应用层协议,这一点本质上是告诉我们,HTTP服务器本质上就是一个 TCP 服务器,只不过应用层基于 HTTP 协议格式进行数据的组织和解析来明确客户端的请求并完成业务处理。


二、Reactor 模式

概念:

Reactor 模式,是指通过一个或多个输入同时传递给服务器进行请求处理时的事件驱动处理模式。

服务器程序处理传入多路复用,并将它们同步分派给请求对应的处理线程,Reactor 模式也叫 Dispatcher 模式。

简单理解就是使用 I/O多路复用统一监听事件,收到事件后分发给处理进程或线程,是编写高性能网络服务器的必备技术之一。

分类:

1. 单Reactor单线程:单I/O多路复用 + 业务处理
  1. 通过 IO 多路复用模型进行客户端请求监控

  2. 触发事件后,进行事件处理

a. 如果是新建连接请求,则获取新建连接,并添加至多路复用进行时间监控

b. 如果是数据通信请求,则进行对应数据处理 (接受数据,处理数据,发送相应)

优点: 单线程操作,操作都是串行化,思维较为简单,编码流程也较为简单 (不用考虑进程或者线程之间的通信,以及安全问题)
**缺点:**无法有效利用CPU多核资源,所有的事件监控以及业务处理都在一个线程中完成的,很容易达到性能瓶颈。

**使用场景:**客户端数量较少,且处理速度较为快速的场景。

示意图:

2. 单Reactor多线程:单I/O多路复用+线程池 (业务处理)
  1. Reactor线程通过 I/O 多路复用进行客户端请求监控

  2. 触发事件后,进行事件处理

a. 如果是新建连接请求,则获取新建连接,并添加多路复用模型进行事件监控

b. 如果是数据通信请求,则接收数据后分发给 worker 线程池进行业务处理

c. 工作线程处理完毕后,将响应交给Reactor进行数据响应

优点: 充分利用CPU多核资源,处理效率变高,降低了代码的耦合度
**缺点:**在单个Reactor中,包含了对所有客户端的事件监控,以及所有客户端的IO操作,不利于高并发场景(每个时刻都有很多的客户端连接),来不及进行新的客户端连接处理

示意图:


3. 多Reactor多线程:多I/O多路复用+线程池(业务处理)
  1. 在主Reactor中处理新连接请求事件,有新连接到来则分发到子Reactor中监控

  2. 在子Reactor中进行客户端通信监控,有事件触发,则接收数据分发给Worker线程池

  3. Worker线程池分配独立的线程进行具体的业务处理

a. 工作线程处理完毕后,将响应交给子Reactor线程进行数据响应

**优点:**充分利用CPU多核资源,主从Reactor各司其职

示意图:


三、目标定位:One Thread One Loop主从Reactor模型高并发服务器

咱们要实现的是主从Reactor模型服务器,也就是主Reactor线程仅仅监控监听描述符,获取新建连接,保证获取新连接的高效性,提高服务器的并发性能。

主Reactor获取到新连接后分发给子Reactor进行通信事件监控。而子Reactor线程监控各自的描述符的读写事件进行数据读写以及业务处理。

One Thread One Loop 的思想就是把所有的操作都放到一个线程中进行,一个线程对应一个事件处理的循环。

相关推荐
雪落漂泊2 分钟前
Linux基础开发工具(三)gcc/g++与make/makefile篇
linux·运维·服务器
夏虫不可与之言冰3 分钟前
第三课 点亮 LED 与定时器非阻塞闪烁
c语言·c++·vscode·单片机·嵌入式硬件·物联网
爱吃辣椒的小豆豆11 分钟前
Linux-sshd-实战-白名单与跳板机
linux·运维·服务器
注塑机数据采集联网11 分钟前
注塑机数据采集网关读取注塑机工艺/SPC数据计算原理
大数据·网络·数据仓库·物联网·智能路由器·制造
辛苦才能16 分钟前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法
mmsx23 分钟前
Android APK 加固方案怎么落地:从加壳到校验的组合取舍
android·网络·安全·签名
miller-tsunami26 分钟前
STL简介&string相关知识点
开发语言·c++·string
强哥聊算力31 分钟前
《算力江湖·国产GPU突围:摩尔线程故事》第四集:从图形到AI:摩尔线程为什么必须冲进大模型赛道?
运维·服务器·人工智能·ai·gpu算力
智购科技无人售货机工厂1 小时前
MQTT还是HTTP?无人售货机弱网通信协议选型与带宽优化实战~YH
网络·网络协议·http
坤坤子吖1 小时前
Linux 线程同步与互斥——互斥锁
linux·服务器·c++·笔记·学习