Giter Site home page Giter Site logo

tasty's Introduction

intro avatar stars license

Tasty 小而美的网络服务框架

Tasty是使用Modern C++(11/14/17)开发的网络服务框架,脱胎于TinyAndPretty,它秉持简单、易用、可扩展易开发的原则,帮助你快速构建可靠C++后台服务。

别急,正在维护....

分层的微核架构

TAP主体采用微核架构(microkernel architecture),又称为"插件架构"(plug-in architecture)。TAP Center Manager(TAP中枢管理员)会负责系统整体的初始化、子管理员(plugins)的协调与调度,主要功能和业务逻辑都通过插件实现。

  • 良好的功能延伸性(extensibility),需要什么功能,开发一个插件即可.
  • 功能之间是隔离的,插件可以独立的加载和卸载,使得它比较容易部署.
  • 可定制性高,适应不同的开发需要
  • 可以渐进式地开发,逐步增加功能

UNIX友好的配置方式

移植了Kconfig系统,在纯命令行环境下也有对人类友好的配置体验,可视化界面充分展示系统的所有参数细节。

纯粹事件驱动模型

依托Linux系统高效的Epoll功能和C++17强大的泛型支持,本框架中的Event Pool支持了事件管道级别的抽象,将数据挂载和文件描述符监听结合起来,同时配合timer fd完成了纳米级定时事件的处理。

这一模型中,TAP Center Manager充当了总线功能,通过对插件的预设模块魔数进行判断完成调度。Timer Manager也被纳入这一框架中,通过TimeLine这一数据结构完成虚拟时间和现实时间的转换,省去了线程轮询的过程极大提高了CPU使用率。

易用的HTTP/1.1 + COMET

本框架支持了HTTP GET、POST、multipart/form-dataStatic Resource等常见请求形式,并在此基础上实现了COMET长连接服务的支持,使得在懂得都懂的情况下的服务器获得了主动向客户端推送广播的能力。

同时基于Modern C++的现代语言功能,框架推荐支持std::filesystemstd::chrono等在内的现代库,充分使用std::tuplestd::initialize_list和结构化绑定联动的方式,简化了大量的操作流程,配置HTTP服务变得人性化,这一点在实际的线上项目开发中得到了检验。

同时HTTP响应服务支持了字符串类型的HttpResponse、经由sendfile()优化过的FileResponse、自主开发的JsonResponse。充分考虑多种常见实际业务情况。

Reactor模型的单进程多线程服务

本项目在启动初期就把超好用的并发服务的作为重要目标之一。为此移植了简洁好用的Thread Pool,同时使用了RAII风格的std::unique_lock/std::shared_lock操作std::shared_mutex等锁。整体高效可食用。

未来提升的方向

  1. 多半咕咕,没有未来
  2. 分布式支持
  3. Linux下自有网络协议栈
  4. WebSocketHTTP/2 的支持
  5. 协程方向的优化
  6. 完成日志库的开发
  7. BUG FREE

自动化指令说明

在项目文件夹根目录下使用如下指令,可快速使用相应功能。

  • i . 编译全部工程.
    $ make 
  • ii . 编译并运行。
    $ make run
  • iii . 清除build编译文件夹。disrclean可清除menuconfig生成的配置文件。
    $ make (dist)?clean
  • iv . 启动菜单配置,调整程序运行参数
    $ make menuconfig
  • v . 添加参数MODS可仅使选择的模块编译到工程中。
    $ make MODS="module1 module2" (run)?
  • vi. 添加参数MAINARGS可添加运行时命令行参数到main()函数中。
    $ make MAINARGS="sql.db" run
  • vii. 多线程编译,加快编译速度。如-j2双线程编译
    $ make -j(\d*)

添加模块说明

src/目录下的每一个文件夹为一个独立的模块,脚本将自动检测该目录下 的子文件夹并进行编译链接。

  • i . 请在include文件夹下创建$(MODULE_NAME)子目录,用于存放该模块的头文件(即接口)
  • ii . 在该文件夹下定义interface.h文件,标识为该模块的调用接口。如若对该模块进行调用,请在代码中进行如下引用
    #include <$(MODULE_NAME)/interface.h>
  • iii . 在include/router.conf中配置路由信息
  • iii . 创建src/$(MODULE_NAME)子目录,并再次实现模块功能。
  • vi . 在scripts文件夹下存放对应的文档(可选)。

tasty's People

Contributors

lingzichao avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.