【源文件mormot.net.async解析】
概述
这个单元(mormot.net.async)实现了一个高性能的异步网络层。其设计是分层的:
-
底层 (Low-Level):
TPollAsyncConnection和TPollAsyncSockets提供了最基础的、事件驱动的非阻塞套接字(Socket)管理。 -
抽象层 (Asynchronous Process):
TAsyncConnection和TAsyncConnections在底层之上构建了一个通用的、多线程的异步服务器/客户端框架。 -
HTTP 实现层:
THttpAsyncServer及其辅助类在抽象层之上实现了 HTTP 协议。 -
Proxy 实现层:
THttpProxyServer在 HTTP 层之上实现了一个功能齐全的、带缓存的反向代理服务器。
第一部分:底层非阻塞连接 (Low-Level Non-blocking Connections)
1. TPollAsyncConnection
-
功能: 这是一个抽象基类 (
abstract),代表一个单独的异步连接。它封装了套接字句柄 (fSocket)、读/写缓冲区 (fRd,fWr)、线程锁 (fRWSafe) 和 TLS 上下文 (fSecure)。它定义了连接生命周期中的关键虚方法,如OnFirstRead、OnRead(纯虚)、AfterWrite和OnClose。它是所有异步连接对象的基础。 -
关系:
-
被
TPollAsyncSockets管理。 -
是
TAsyncConnection的父类。
-
2. TPollAsyncSockets
-
功能: 这是核心的I/O 轮询引擎。它负责管理多个
TPollAsyncConnection实例。它在内部使用高性能的 I/O 模型(Windows 上的 IOCPfIocpRecvSend或 POSIX 上的epoll/selectfRead/fWrite)来监视所有套接字上的读/写事件。其ProcessRead和ProcessWrite方法由工作线程调用,以处理 I/O 事件并触发TPollAsyncConnection实例上的相应回调(如OnRead)。 -
关系:
-
管理一组
TPollAsyncConnection实例。 -
是
TAsyncConnectionsSockets的父类。
-
第二部分:客户端/服务器异步处理 (Client or Server Asynchronous Process)
3. TAsyncConnection
-
功能: 继承自
TPollAsyncConnection,是应用程序层连接的具体基类。它添加了对其所有者 (fOwner: TAsyncConnections) 的引用、远程 IP (fRemoteIP) 和空闲/活动跟踪(fLastOperation)。 -
关系:
-
继承自
TPollAsyncConnection。 -
被
TAsyncConnections创建和管理。 -
是
THttpAsyncConnection的父类。
-
4. TAsyncConnectionsSockets
-
功能: 继承自
TPollAsyncSockets,是一个专门为TAsyncConnections框架服务的 I/O 轮询引擎。它重写了OnError和OnClosed等事件,将底层的 I/O 事件与TAsyncConnections的连接管理(例如垃圾回收和列表移除)挂钩。 -
关系:
-
继承自
TPollAsyncSockets。 -
被
TAsyncConnections创建和拥有 (作为fSockets字段)。
-
5. TAsyncConnectionsThread
-
功能: 一个工作线程类 (
class(TLoggedThread))。这是线程池中的主力。它的DoExecute循环等待 I/O 事件(通过TWinIocp.GetNext或fEvent.WaitForEver),然后调用fOwner.fSockets.ProcessRead来处理准备好的连接。 -
关系:
-
被
TAsyncConnections创建和拥有 (在fThreads数组中)。 -
操作
TAsyncConnections的fSockets属性来处理 I/O。
-
6. TAsyncConnections
-
功能: 这是一个核心抽象类 (
class(TLoggedThread)),它将 I/O 引擎和线程池结合在一起。它管理:-
一个
TAsyncConnectionsSockets(fSockets) I/O 轮询器。 -
一个工作线程池 (
fThreads数组,元素为TAsyncConnectionsThread)。 -
一个所有活动连接的列表 (
fConnection,元素为TAsyncConnection)。 -
连接对象的创建、查找 (
ConnectionFind)、删除和垃圾回收 (fGC1,fGC2)。
-
-
关系:
-
拥有一个
TAsyncConnectionsSockets和一个TAsyncConnectionsThread数组。 -
管理一个
TAsyncConnection列表。 -
是
TAsyncServer和TAsyncClient的父类。
-
7. TAsyncServer
-
功能: 继承自
TAsyncConnections,实现了一个通用的 TCP 服务器。它增加了一个监听套接字 (fServer: TCrtSocket)。它的主DoExecute循环(在自己的线程中运行)负责Accept传入的连接。一旦接受连接,它会创建一个fConnectionClass(TAsyncConnection的子类)的实例,并将其注册到fSockets轮询器中,由工作线程处理后续 I/O。 -
关系:
-
继承自
TAsyncConnections。 -
是
THttpAsyncConnections的父类。
-
8. TAsyncClient
-
功能: 继承自
TAsyncConnections,实现了一个通用的多连接 TCP 客户端。与TAsyncServer不同,它的DoExecute循环不

