本文基于 HAProxy 1.5-dev7 版本。
- 目录
- 1. 关键数据结构 session
- 2. 相关初始化
- 2.1. 初始化处理 TCP 连接的方法
- 2.2. 初始化 listener
- 2.3. 绑定所有已注册协议上的 listeners
- 2.4. 启用所有已注册协议上的 listeners
- 3. TCP 连接的处理流程
- 3.1. 接受新建连接
- 3.2. TCP 连接上的接收事件
- 3.3. TCP 连接上的发送事件
- 3.4. http 请求的处理
-
1. 关键数据结构 session
haproxy 负责处理请求的核心数据结构是 struct session,本文不对该数据结构进行分析。
从业务的处理的角度,简单介绍一下对 session 的理解:
- haproxy 每接收到 client 的一个连接,便会创建一个 session 结构,该结构一直伴随着连接的处理,直至连接被关闭,session 才会被释放
- haproxy 其他的数据结构,大多会通过引用的方式和 session 进行关联
- 一个业务 session 上会存在两个 TCP 连接,一个是 client 到 haproxy,一个是 haproxy 到后端 server。
此外,一个 session,通常还要对应一个 task,haproxy 最终用来做调度的是通过 task。