第一章 前置知识
1. 上下文是什么?
想象一下,你在一个繁忙的餐厅工作,作为服务员,你需要管理顾客的订单、上菜、收钱等等。这个繁忙的餐厅就像是网络服务器,而你就是io_context
。你在这里处理所有的请求,确保每个顾客都能顺利得到他们想要的服务。
- 事件循环:就像你不停地在餐厅里穿梭,接收顾客的点单、给厨师下单、上菜、收钱,
io_context
也是不停地“循环”运行,处理网络请求。
2. 为什么网关服务器需要上下文?
在一个网关服务器中,通常需要处理很多并发的客户端连接。这里的io_context
就像是你这个服务员,让你能够有效地管理多个顾客(即多个连接),而不必为每个顾客单独派一个服务员。这样可以节省人力,提高效率。
- 集中管理:所有的订单(连接请求)都交给你来处理。你只需记住每个顾客的需求,
io_context
也是这样,它集中管理所有的网络操作。
3. 通俗的比喻
- 想象一个火车站:火车站是
io_context
,每列火车代表一个网络连接。火车站管理所有的列车进出(即接收和发送数据),确保每列火车在正确的时间到达和离开,而不是让每列火车自己单独管理。
第二章 实际例子
http://火车1想要进入火车站:8080
http://火车2想要进入火车站:8080
http://火车3想要进入火车站:8080
假定有三个URL发来网络请求;
1. 理解请求与 io_context
的关系
在这个例子中,每条 URL 请求就像一列想要进入火车站的火车,而 io_context
就是负责管理和调度这些火车的火车站。所有请求都发送到同一个端口(8080),而 io_context
会处理它们。
2. 如何处理请求
当你创建 io_context
时,它会负责以下操作:
- 监听连接:火车站(
io_context
)会监听 8080 端口,等待火车(连接请求)到达。 - 接收请求:当“火车1”、“火车2”或“火车3”试图进入火车站时,
io_context
会接收到这些连接请求。 - 调度处理:一旦请求到达,
io_context
会把这些请求排队,然后依次处理它们。处理的顺序可能是:- 先处理“火车1”进入火车站。
- 然后是“火车2”。
- 最后是“火车3”。