资讯详情

muduo网络库--服务端视角核心流程与评价

📅 2026/10/18 1:11:25 | 华诺云谱 👁 阅读
muduo网络库--服务端视角核心流程与评价
1.核心流程1.1.服务端视角1.1.1.服务启动流程准备主EventLoop对象准备一个支持业务处理的BussinessServer含TcpServer成员。TcpServer初始化。TcpServer启动创建监听描述符注册可读监控设置新连接事件回调设置收包回调TcpServer配置的线程数大于0时依次启动关联的工作线程运行线程的事件循环。提供一个线程运行EventLoop的事件循环此时服务侧可以接收外部连接请求主事件循环和内部工作线程启动运行。1.1.2.被动连接建立流程分成可读事件处理和异步任务执行两阶段监听套接字可读事件处理监听套接字可读事件处理accept取出套接字回调到TcpServer层回调处理中分配EventLoopEventLoop和线程绑定也即将套接字分配到了某个线程产生基础连接对象注册基础对象到TcpServer下被动连接对象集合。设置基础连接的连接事件回调消息回调关闭回调向关联EventLoop投递异步任务异步任务执行注册可读事件监控引发连接事件回调业务层连接事件回调处理1.1.3.被动连接数据接收业务包处理流程epoll_wait产生套接字可读事件可读事件处理若读到有效数据引发一次收包回调业务层收包回调中需处理完整包识别构成一个完整包时完整包业务处理接收缓存更新若读到0引发工作线程内连接关闭评价业务层单个收包回调需要处理的事情过多易用性不佳完整包识别完整包的业务处理接收缓存更新一次收到多个包时多个包的拆分接收缓存底层基于std::vector需要以来拷贝转移/拷贝扩容等方式在空间不足时容纳接收数据效率不高。可读事件中提供一块临时缓存读到临时缓存的内容需拷贝到接收缓存效率不高1.1.4.被动连接数据发送处理流程分为任务投递和异步任务执行两个阶段异步发送任务投递连接状态检测若检测通过则继续。投递异步发送任务异步发送任务处理若积压数据为0直接写入套接字发送缓存若存在剩余数据剩余数据拷贝到积压缓存若积压缓存不为0且尚未注册可写监控注册可写监控若写入错误工作线程内关闭连接评价发送过程产生多次拷贝转移效率不佳异步投递时产生一次数据拷贝异步发送中剩余数据存储到积压缓存产生一次数据拷贝积压缓存底层基于std::vector需要基于拷贝转移/拷贝扩容在空间不足时接纳新数据效率不佳同一工作线程所有关联套接字的异步任务投递共用一个线程级任务队列锁竞争不佳1.1.5.连接关闭流程连接关闭可以细分为三种类型工作线程下网络库内部关闭工作线程下业务回调关闭非工作线程下业务侧关闭网络库内部关闭设置状态为关闭取消事件监控引发关闭回调业务层连接关闭回调引发内部关闭回调从服务对象被动连接映射中移除此被动连接从复用器对象移除关联Channel业务回调关闭关闭处理若为连接状态设置状态为关闭中投递异步关闭任务异步关闭任务处理流程为网络库内部关闭流程非工作线程下业务侧关闭关闭处理设置状态为关闭中投递异步关闭任务异步关闭任务处理流程为网络库内部关闭流程1.2.服务视角下评价并发安全被动连接建立数据接收收包回调数据发送连接关闭均放在单个工作线程串行化执行。并发安全。资源管理评价TcpServer/主EventLoop生命期由业务侧管控基础连接对象生命开始监听套接字可读事件处理中TcpServer回调中产生记录到服务对象连接映射。生命结束连接关闭中执行了从服务对象映射中移除连接业务层不再持有任何此连接智能指针。内部功能工作线程生命开始TcpServer执行start生命结束TcpServer执行stop后析构性能评价接收过程及接收缓存性能不佳发送过程及发送缓存性能不佳任务投递共有线程级任务对象锁竞争较大
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑