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

学做饺子馅上那个网站网站建设是什么工作

学做饺子馅上那个网站,网站建设是什么工作,做电脑网站用什么软件,如何做商城网站Muduo库核心模块——TcpServer Muduo库的TcpServer模块是一个基于Reactor模式的高性能TCP服务端实现,负责管理监听端口、接受新连接、分发IO事件及处理连接生命周期。 一、核心组件与职责 Acceptor 监听指定端口,接受新连接,通过epoll监听l…

Muduo库核心模块——TcpServer

Muduo库的TcpServer模块是一个基于Reactor模式的高性能TCP服务端实现,负责管理监听端口、接受新连接、分发IO事件及处理连接生命周期。


一、核心组件与职责

  1. Acceptor
    • 监听指定端口,接受新连接,通过epoll监听listenfd的可读事件(表示新连接到达)。
    • 内部封装socketbind操作,支持SO_REUSEADDR选项避免端口占用。
    • 新连接到达时,调用TcpServer的回调创建TcpConnection对象。
  2. EventLoop
    • 主事件循环(运行在主线程),处理Acceptor的事件及定时任务。
    • 采用“one loop per thread”模型,确保线程安全,所有操作通过EventLoop的任务队列跨线程调度。
  3. EventLoopThreadPool
    • IO线程池,管理多个子EventLoop,提升并发处理能力。
    • 新连接通过轮询或哈希策略分配到子EventLoop,实现负载均衡。
  4. TcpConnection
    • 封装一条TCP连接,管理send/recv缓冲区、处理读写事件及连接状态(连接中/已断开)。
    • 通过Channel注册到所属EventLoop,监听socket的可读/可写事件。
  5. 回调机制
    • 用户可设置的关键回调:
      • ConnectionCallback:连接建立或关闭时触发。
      • MessageCallback:接收到数据时调用,传递数据缓冲区及时间戳。
      • WriteCompleteCallback:数据发送完成时通知。

二、工作流程

  1. 启动服务器
    • 用户调用TcpServer::start(),启动EventLoopThreadPoolAcceptor开始监听。
    • EventLoop进入循环,等待事件。
  2. 接受新连接
    • Acceptor监听到新连接,创建connfd,构造TcpConnection对象。
    • 为新连接分配IO线程(从EventLoopThreadPool中选择一个子EventLoop)。
    • TcpConnection的socket注册到子EventLoopepoll中。
  3. 处理IO事件
    • 读事件:子EventLoop触发可读事件,TcpConnection读取数据至缓冲区,调用用户MessageCallback
    • 写事件:发送缓冲区中的数据,写完成后触发WriteCompleteCallback
    • 错误处理:处理EPOLLERR等异常,关闭连接并通知用户。
  4. 连接关闭
    • 主动关闭:调用TcpConnection::shutdown(),等待数据发送完毕。
    • 被动关闭:接收到EOF或错误,触发handleClose(),移除连接并销毁资源。

三、线程安全与资源管理

  1. 跨线程调度
    • 通过EventLoop::runInLoop()确保回调在正确的线程执行,避免竞态条件。
    • 示例:主线程接受连接后,通过ioLoop->runInLoop()TcpConnection添加到子线程。
  2. 连接生命周期
    • 使用shared_ptr<TcpConnection>管理连接对象,引用计数确保回调期间对象存活。
    • 连接关闭时,通过TcpServer::removeConnection()从连接列表移除,并延迟销毁(防止析构在回调中触发)。
  3. 资源释放
    • TcpServer维护ConnectionMap跟踪所有活跃连接,析构时自动关闭所有连接。

四、性能优化策略

  1. 零拷贝优化
    • 使用readv/writev分散读写,减少内存拷贝。
    • 应用层缓冲区设计,避免频繁系统调用。
  2. LT模式与边缘触发
    • 采用epoll的LT(水平触发)模式,确保数据未处理时会持续通知,简化编程。
    • 非阻塞IO配合EAGAIN处理,避免线程阻塞。
  3. 高效线程模型
    • 主线程仅处理新连接,IO线程分担数据读写,充分发挥多核优势。

五、示例代码

#include <muduo/net/TcpServer.h>
#include <muduo/net/EventLoop.h>void onConnection(const muduo::net::TcpConnectionPtr& conn) {if (conn->connected()) {printf("New connection: %s\n", conn->peerAddress().toIpPort().c_str());} else {printf("Connection closed: %s\n", conn->peerAddress().toIpPort().c_str());}
}void onMessage(const muduo::net::TcpConnectionPtr& conn,muduo::net::Buffer* buf,muduo::Timestamp time) {printf("Received %zd bytes: %s\n", buf->readableBytes(), buf->retrieveAllAsString().c_str());
}int main() {muduo::net::EventLoop loop;muduo::net::InetAddress listenAddr(8888);muduo::net::TcpServer server(&loop, listenAddr, "ExampleServer");server.setConnectionCallback(onConnection);server.setMessageCallback(onMessage);server.setThreadNum(4);  // 4 IO threadsserver.start();loop.loop();  // Block here
}

六、关键设计思想

  1. Reactor模式:事件驱动,非阻塞IO,提升吞吐量。
  2. 资源局部性:每个连接绑定到固定IO线程,减少锁竞争。
  3. 回调抽象:用户聚焦业务逻辑,网络细节由库封装。
  4. RAII管理:智能指针自动管理资源,防止泄漏。

通过上述机制,Muduo的TcpServer模块实现了高并发、低延迟的TCP服务端,适用于需要处理大量持久连接的场景(如即时通讯、实时数据推送等)。

http://www.dtcms.com/wzjs/212742.html

相关文章:

  • 廊坊建设网站企业网站提交工具
  • 关于做视频网站的一些代码全国人大常委会副委员长
  • 合肥网站运营管理公司北京全网营销推广公司
  • 宝安做网站公司市场调研报告范文2000
  • 怎么做淘宝劵网站电商平台建设方案
  • 做电池的有哪些网站广东广州重大新闻
  • jsp和servlet网站开发经典seo伪原创
  • 站长之家 网站模板seowhy官网
  • 深圳专业建网站多少钱沈阳专业网站seo推广
  • 韩国做hh网站百度搜索推广登录入口
  • 在酒吧里做那个视频网站成功的网络营销案例ppt
  • 做网站借用网络图片不违法吧免费推广网站排名
  • 六盘水市网站建设汽车行业网站建设
  • 做网站好不好百度怎么免费推广自己的产品
  • 企业搭建pc端网站百度推广客户端下载
  • qq上网站做我女朋友seo的作用
  • 杨浦网站建设公司沪深300指数怎么买
  • wordpress 清空数据库西安seo关键词推广
  • 500网站建设互动营销策略
  • 学做莱网站网络营销品牌策划
  • 高中生做那个的网站广州白云区疫情实时动态
  • 乐山 网站建设百度关键词排名查询
  • 茶叶建设网站的优势营销型网站建设费用
  • 网站没有备案做竞价吗搜索引擎优化的常用方法
  • 建设的招标网站软件外包公司
  • 培训会网站建设哪里有免费的网站推广服务
  • 织梦网站301重定向seo关键词推广话术
  • 上海网站建设在哪里站外seo推广
  • 企企业业网网站站建建设设怎么接广告赚钱
  • 做淘宝客网站传媒网站