当前位置: 首页 > news >正文

【源文件mormot.net.async解析】

概述

这个单元(mormot.net.async)实现了一个高性能的异步网络层。其设计是分层的:

  1. 底层 (Low-Level): TPollAsyncConnectionTPollAsyncSockets 提供了最基础的、事件驱动的非阻塞套接字(Socket)管理。

  2. 抽象层 (Asynchronous Process): TAsyncConnectionTAsyncConnections 在底层之上构建了一个通用的、多线程的异步服务器/客户端框架。

  3. HTTP 实现层: THttpAsyncServer 及其辅助类在抽象层之上实现了 HTTP 协议。

  4. Proxy 实现层: THttpProxyServer 在 HTTP 层之上实现了一个功能齐全的、带缓存的反向代理服务器。


第一部分:底层非阻塞连接 (Low-Level Non-blocking Connections)

1. TPollAsyncConnection

  • 功能: 这是一个抽象基类 (abstract),代表一个单独的异步连接。它封装了套接字句柄 (fSocket)、读/写缓冲区 (fRd, fWr)、线程锁 (fRWSafe) 和 TLS 上下文 (fSecure)。它定义了连接生命周期中的关键虚方法,如 OnFirstReadOnRead (纯虚)、AfterWriteOnClose。它是所有异步连接对象的基础。

  • 关系:

    • TPollAsyncSockets 管理。

    • TAsyncConnection父类

2. TPollAsyncSockets

  • 功能: 这是核心的I/O 轮询引擎。它负责管理多个 TPollAsyncConnection 实例。它在内部使用高性能的 I/O 模型(Windows 上的 IOCP fIocpRecvSend 或 POSIX 上的 epoll/select fRead/fWrite)来监视所有套接字上的读/写事件。其 ProcessReadProcessWrite 方法由工作线程调用,以处理 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 轮询引擎。它重写了 OnErrorOnClosed 等事件,将底层的 I/O 事件与 TAsyncConnections 的连接管理(例如垃圾回收和列表移除)挂钩。

  • 关系:

    • 继承自 TPollAsyncSockets

    • TAsyncConnections 创建和拥有 (作为 fSockets 字段)。

5. TAsyncConnectionsThread

  • 功能: 一个工作线程类 (class(TLoggedThread))。这是线程池中的主力。它的 DoExecute 循环等待 I/O 事件(通过 TWinIocp.GetNextfEvent.WaitForEver),然后调用 fOwner.fSockets.ProcessRead 来处理准备好的连接。

  • 关系:

    • TAsyncConnections 创建和拥有 (在 fThreads 数组中)。

    • 操作 TAsyncConnectionsfSockets 属性来处理 I/O。

6. TAsyncConnections

  • 功能: 这是一个核心抽象类 (class(TLoggedThread)),它将 I/O 引擎和线程池结合在一起。它管理:

    1. 一个 TAsyncConnectionsSockets ( fSockets ) I/O 轮询器。

    2. 一个工作线程池 (fThreads 数组,元素为 TAsyncConnectionsThread)。

    3. 一个所有活动连接的列表 (fConnection,元素为 TAsyncConnection)。

    4. 连接对象的创建、查找 (ConnectionFind)、删除和垃圾回收 (fGC1, fGC2)。

  • 关系:

    • 拥有一个 TAsyncConnectionsSockets 和一个 TAsyncConnectionsThread 数组。

    • 管理一个 TAsyncConnection 列表。

    • TAsyncServerTAsyncClient父类

7. TAsyncServer

  • 功能: 继承自 TAsyncConnections,实现了一个通用的 TCP 服务器。它增加了一个监听套接字 (fServer: TCrtSocket)。它的主 DoExecute 循环(在自己的线程中运行)负责 Accept 传入的连接。一旦接受连接,它会创建一个 fConnectionClassTAsyncConnection 的子类)的实例,并将其注册到 fSockets 轮询器中,由工作线程处理后续 I/O。

  • 关系:

    • 继承自 TAsyncConnections

    • THttpAsyncConnections父类

8. TAsyncClient

  • 功能: 继承自 TAsyncConnections,实现了一个通用的多连接 TCP 客户端。与 TAsyncServer 不同,它的 DoExecute 循环不

http://www.dtcms.com/a/520814.html

相关文章:

  • 给网站做优化刷活跃要收费吗帮人做网站如何收费
  • 网站 备案 名称网站开发服务的协议
  • 什么是CUDA架构
  • 项目——基于C/S架构的预约系统平台(2)
  • 网站建设工期及预算品牌vi形象设计公司
  • C++ 的学习路线(转)
  • wsl使用代理网络
  • c#笔记番外篇同步异步并行串行多线程(以及lambda 表达式和Stopwatch)
  • 扬州市住房建设局网站免费微信公众号素材网
  • P8813 [CSP-J 2022] 乘方
  • QT实现消息未读提示
  • 一个人是否可以做公司网站做网站 租服务器吗
  • 数学教学网站开发微网站 举例
  • deeptest平台使用python脚本进行断言 含json预处理
  • 爬虫的意义
  • 文化投资的微网站怎么做兰州网站建设人才招聘
  • 以前可以做视频的网站免费erp企业管理系统
  • 世界模型和大语言模型的区别
  • 使用navicat下载和上传二进制图片 mediumblob、blob类型
  • 【人工智能系列:走近人工智能04】了解人工智能的框架:从TensorFlow到PyTorch
  • 【笔记】解决 ComfyUI 安装节点 ComfyUI-Addoor (葵花宝典)后启动报错:No module named ‘ComfyUI-Addoor’
  • 婚纱影楼网站源码财务管理咨询
  • 网站建设有什么作用推广网站的软文
  • 比特币P2PKH交易花费的核心流程与数据流转
  • 杰理蓝牙芯片开发平台API说明 21
  • 在 Sui 上构建《勇者前线》游戏的新篇章
  • 江西省建设工程学校网站cms管理什么意思
  • SAP SD 价格主数据创建接口分享
  • huggingface模型下载到本地
  • 有没有找人做标书的网站国外最开放的浏览器是哪个