Skip to content

Latest commit

 

History

History
48 lines (29 loc) · 2.32 KB

README.md

File metadata and controls

48 lines (29 loc) · 2.32 KB

GadgetNet

本项目是参考(chenshuo/muduo)实现的一个小型的基于Reactor模型的多线程网络库。

1. 快速开始

1.1 开发环境

  • 操作系统 Ubuntu 20.04.5 LT
  • 编译器 g++ 9.4.0
  • 项目构建 cmake 3.16.3
  • 单元测试 gtest

1.2 编译

git clone [https://github.com/Aglargil/GadgetNet](https://github.com/Aglargil/GadgetNet)
cd [GadgetNet](https://github.com/Aglargil/GadgetNet)
mkdir build && cd build
cmake ..
make && make test

2. 各模块介绍

2.1 事件循环 (EventLoop)

事件循环是 GadgetNet 的核心组件,同时也是网络编程的基础。事件循环基于 epoll 和定时器机制实现,可以处理网络 IO 事件和定时器事件。EventLoop 采用单线程模型,即一个线程只有一个EventLoop对象,通过监听文件描述符的IO时间,来驱动网络库中的其他组件进行相应的操作。****

2.2 IO 多路复用器 (Poller)

IO 多路复用器是 GadgetNet 中实现事件循环的关键组件。目前 GadgetNet 支持 epoll 作为 IO 多路复用器,但未来也可能加入对其他多路复用技术的支持。对于 epoll 的封装,GadgetNet 使用了 ChannelEpollPoller 两个类。

2.3 线程池 (EventLoopPool)

EventLoopPool 类是一个管理多个 EventLoop 实例的类,用于提高高并发网络应用的性能和可扩展性。它的构造函数允许指定池中的 EventLoop 实例的数量,并且它提供了多个方法来启动、停止和获取 EventLoop 实例。

操作系统中的线程是比较重量级的,它们的创建和销毁都需要耗费很多时间和资源。线程池可以对工作者线程进行复用,通过将线程池的大小设置为适当的值,可以在不降低性能的情况下提高并发能力。

2.4 TcpServer

TCP 服务器是 GadgetNet 中最常用的组件之一,用于实现服务器端的网络通信。TcpServer 类用于表示服务器,TcpConnection 类用于表示连接。

2.5 任务节点 (TaskNode)

TaskNode是一个可以运行异步任务的类,它可以接收一个函数并异步执行。在执行完成后,可以将执行结果传递给下一个TaskNodeTaskNode支持多个任务节点的串行和并行执行,可以构建复杂的任务流程。

3 目录结构