LikeUSummer / EasyIO

Linux 上灵活易用的 IO 框架,基于现代 C++ 设计

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

简介

这是一个基于 Linux 平台的 IO 框架,其特点是精简易用、灵活高效。

框架被合理拆分为通信层、协议层与业务层,各层都应用面向对象设计实现了高内聚、低耦合,通过多层派生充分复用共性代码,最大程度减少冗余。通信层又横向拆分为通道类和监视器类,通道类负责数据传输,通过派生与组合可灵活支持多种通信方式(串口,蓝牙,TCP,SSL),监视器类管理和调度通道,其中应用了 select/epoll 等 IO 多路复用技术,保证了单线程 IO 效率。协议层采用状态机实现数据解析,这其实是在手动模拟协程,解析过程可随时暂停和重入,以充分发挥非阻塞 IO 的效率。值得一提的是,协议类和通道类之间的耦合,并未简单使用组合关系,而是基于函数式编程**(函数是一等公民、闭包提供更小粒度的变量绑定),将二者关联起来,使得“不需要协议的通道”这一语义能够自然表达,避免了冗余代码。此外,我还编写了简易线程池和环形队列等工具类,以便支持更高要求的 IO 业务。

最后,我基于这个框架编写了几个应用 demo,如聊天程序、协议通信、多线程 HTTP 文件下载等(其中也应用了较多现代 C++ 特性)。整个项目都使用 gn/ninja 工具组织构建,不仅编译速度快,且便于维护和扩展。

编译构建

环境依赖

  • linux 系统

  • gcc 工具链

  • openssl 开发库

用 gn 生成 ninja 编译描述文件

仓内已经预置了 gn 和 ninja 工具(linux 64位版),直接执行如下命令:

./build/gn gen -C out

用 ninja 编译所需的应用/测试模块

为了演示 EasyIO 框架的用法,在 usage 目录下给出了一些示例应用程序,对应的可执行模块名请查看根目录下的 BUILD.gn 文件,例如编译其中的 HTTP 多线程下载器http_downloader,执行以下命令:

 ./build/ninja -C out http_downloader

如果需要构建 usage 目录下的所有演示程序,则执行:

./build/ninja -C out

构建出的可执行文件都在 out 目录中。

About

Linux 上灵活易用的 IO 框架,基于现代 C++ 设计


Languages

Language:C++ 100.0%