Muduo网络库剖析 --- 架构设计

文章目录

  • 前言
  • 概述篇
    • 一、Muduo网络库简介
      • Reactor事件处理模式
    • 二、基于muduo实现简易聊天服务器
      • 实现
      • 测试运行
    • 三、muduo的架构设计
      • Reacor模式
      • muduo框架架构解析
      • 主从Reactor工作流程
        • 主线程(main Reactor)
        • 工作线程(sub Reactor)
      • 线程分配与负载均衡
    • 四、总结
      • 线程分配与负载均衡
    • 四、总结

前言

muduo库是陈硕个人开发基于reactor模式的tcp网络编程库。本人之前有学习过boost.asio网络库,故学习一下Muduo网络库,并分析它们之间的优缺点。

本系列将重点放在以下几件事情:

  1. 梳理Muduo的核心架构设计以及各个模块的职责
  2. 理解Muduo的事件驱动机制
  3. 理解Muduo的多线程模型
  4. 剖析作者精妙的代码设计思路并且重写其核心代码,将原来依赖boost库的地方都替换成C++11语法

下面列出主要讲解的模块

  1. 网络相关模块
    • Socket
    • InetAddress
    • TcpConnection
    • Acceptor
    • TcpServer
  2. 事件循环相关模块
    • EventLoop
    • Channel
    • Poller
    • EpollPoller
  3. 线程相关模块
    • Thread
    • EventLoopThread
    • EventLoopThreadPool
  4. 基础模块
    • Buffer
    • Timestamp
    • Logger

概述篇

一、Muduo网络库简介

Muduo网络库是一个基于非阻塞IO和事件驱动的C++高并发TCP网络库。它基于Reactor的事件处理模式,并且采用了one loop per thread的线程模型,即每个线程只运行了一个事件循环。这种模型使得Muduo能够充分利用多核CPU的性能,实现高效的网路通信。

Reactor事件处理模式

Reactor是这样的一种模式,它要求主线程只负责监听文件描述符上是否有事件发生,如果有的话立即通知工作线程。除此之外,主线程不做任何其他实质性工作。读写数据,接受新的连接,以及处理客户请求均在工作线程中完成。

二、基于muduo实现简易聊天服务器

实现

在使用muduo网络库的一个巨大优势在于:

业务逻辑与网络层的解耦。muduo是一个网络层框架,已经把网络层面的接受新的连接、收发数据等操作都封装好了,开发者可以只去关注业务逻辑而不必花费大量时间在底层网络通信的细节上。

这里介绍下面的代码会用到的两个模块:

  • 接受新连接:Muduo 的 TcpServer 模块自动处理新客户端的连接请求。
  • 连接的生命周期管理:通过 TcpConnection 管理每个连接的状态(建立、关闭)。

聊天服务器功能:

  1. 支持多个客户端同时连接。
  2. 广播消息:当某个客户端发送消息时,服务器将消息广播给所有其他客户端
  3. 管理客户端连接,支持连接建立和断开通知

ChatServer用来抽象这一过程,下面是ChatServer的声明

#include 
#include 
#include 
#include 
#include 

class ChatServer {
   
public:
    // ChatServer的构造函数
    ChatServer(muduo::net::EventLoop* loop,
               const muduo::net::InetAddress& listenAddr);
    void start();

private:
   	// 连接新的客户端的回调函数
    void onConnection(

你可能感兴趣的:(C++11,剖析Muduo,网络,c++,tcp/ip,网络协议)