[evpp/muduo/reactor] evpp事件驱动网络库 整体架构梳理

本文介绍了evpp,一个C++11改写的muduo库,强调其现代化的代码风格。文章通过分析TCP Echo Server示例,探讨了evpp的核心类,如TCPServer、TCPClient、Listener等,并详细梳理了TCPServer的数据成员和接口,阐述了如何通过回调函数实现业务逻辑与框架的解耦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

muduo很多人都听说过,那evpp可以理解成是muduo用C++11改写后的升级版。
相比muduo的代码风格,evpp会显得更加现代一点,更讨我们年轻人的喜欢。
作为例子,这里是一段TCP Echo Server的示例代码:

    evpp::EventLoop loop;
    evpp::TCPServer server(&loop, "0.0.0.0:9099", "TCPEchoServer", thread_num);
    server.SetMessageCallback([](const evpp::TCPConnPtr& conn,
                                  evpp::Buffer* msg) {
        conn->Send(msg);
    });
    server.SetConnectionCallback([](const evpp::TCPConnPtr& conn) {
        if (conn->IsConnected()) {
            LOG_INFO << "A new connection from " << conn->remote_addr();
        } else {
            LOG_INFO << "Lost the connection from " << conn->remote_addr();
        }
    });
    server.Init();
    server.Start();
    loop.Run();

evpp的核心代码其实不多,之前也已经花了一段时间去阅读;
总的来说,代码本身还是十分通俗易懂的,不像某些天书C++;
相比muduo,evpp一个很明显的变化就是,IO复用相关的抽象直接使用了libevent;
但是,看完之后,总是缺少一个系统性的认识,因此,想借此机会进行梳理;
此外,网上虽然有很多muduo的解析,但是介绍evpp的还是挺少的;
对于习惯C++11风格的人,应该算是多了一种选择;
https://github.com/Qihoo360/evpp

核心类

这里,我先罗列下evpp中的核心类

  • TCPServer
  • Listener
  • TCPClient
  • Connector
  • TCPConn
  • FdChannel
  • EventLoop
  • EventLoopThread
  • EventLoopThreadPool

只要是熟悉Socket编程的同学,看见这几个类后应该还是有点亲切感的。
其中,TcpClient/TcpServer分别抽象TCP客户端和服务器;Connector/Listener分别包装TCP客户端和服务器的建立连接/接受连接;TcpConnection抽象一个TCP连接,无论是客户端还是服务器只要建立了网络连接就会使用TcpConnection;FdChannel是设备fd的包装,在muduo中主要包装socket以及该socket对应的事件处理回调函数;EventLoop是一个事件发生器,它驱动底层的IO复用器产生/发现事件,然后将事件派发到Channel处理;EventLoopThread是一个带有EventLoop的线程;EventLoopThreadPool自然是一EventLoopThread的资源池,维护一堆EventLoopThread。

TCPServer类

这里,我们以自顶向下的方式进行梳理。所以,我们先来看看TCPServer的数据成员。

    // TCPServer的名字,比如"Echo", "Discard"等
    const std::string name_; 

    // TCPServer最重要的一点就是,创建ListenFD然后Accept新连接;
    // 接下来的3项,给出了必要的信息;
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值