wfrest 源码篇 1、HttpServer

1、前情回顾

        上一篇我们简述了 (1条消息) 1、wfrest 01_basic_Mr-zhou先生的博客-CSDN博客的基础使用,个人认为在面对一个新的代码时,如果太关注于细节,就会陷入爱情的边缘,会对整体产生不必要的误解,因此学会使用示例,这会让我们更加了解源码的使用,一定要动手敲一敲才会有所得。发一下 http 的介绍链接,大家可以从中了解并学习 HEAD - HTTP | MDN (mozilla.org)

2、HttpServer 类介绍

        通常自定义生成静态库或者动态库的时候,我们需要定义外部接口给客户使用,将接口暴露出,但是实现进行隐藏封装,这样的设计是非常常见的,也是一个必要的手段,下面图片是httpserver的类图,这里面暴露的接口主要有3重类型,如下简述。

 

2.1 普通任务接口

        以下接口以GET 来示例讲解,Handler 是函数句柄 std::function函数调用的命名,通过传递参数 访问的API路由 进行lamada 回调,通过 HttpReq *req 请求,HttpResp *resp 应答,resp 自定义将消息封装发送出去  resp->String。计算型Handler和普通的Handler之间就只差了一个参数(第二个参数),就是需要输入计算型任务队列的id,其他都一样


   using Handler = std::function<void(const HttpReq *, HttpResp *)>;

    void GET(const std::string &route, const Handler &handler)
    {
        blue_print_.GET(route, handler);
    }

    // curl -v http://ip:port/data
    svr.GET("/data", [](const HttpReq *req, HttpResp *resp)
    {
        std::string str = "Hello world";
        resp->String(std::move(str));
    });


    
    void GET(const std::string &route, int compute_queue_id, const Handler &handler)
    {
        blue_print_.GET(route, compute_queue_id, handler);
    }

    
    void Fibonacci(int n, HttpResp *resp)
    {
        unsigned long long x = 0, y = 1;
    if (n <= 0 || n > 94)
    {
        fprintf(stderr, "invalid parameter");
        return;
    }
    for (int i = 2; i < n; i++)
    {
        y = x + y;
        x = y - x;
    }
    if (n == 1)
        y = 0;
    resp->String("fib(" + std::to_string(n) + ") is : " + std::to_string(y) + "\n");
    }

    svr.GET("/compute_task", 1, [](const HttpReq *req, HttpResp *resp)
    {
        int num = std::stoi(req->query("num"));
        Fibonacci(num, resp);
    });

2.2、串行任务接口

        串行任务,意思是将任务串连起来执行,先后存在执行顺序。也分成2种

    using SeriesHandler = std::function<void(const HttpReq *, HttpResp *, SeriesWork *)>;

    void GET(const std::string &route, const SeriesHandler &handler)
    {
        blue_print_.GET(route, handler);
    }

    void GET(const std::string &route, int compute_queue_id, const SeriesHandler &handler)
    {
        blue_print_.GET(route, compute_queue_id, handler);
    }

2.3、自定义参数接口

        由普通接口和串行接口的自定义传参组成

    template<typename... AP>
    void GET(const std::string &route, const Handler &handler, const AP &... ap)
    {
        blue_print_.GET(route, handler, ap...);
    }

    template<typename... AP>
    void GET(const std::string &route, int compute_queue_id,
             const Handler &handler, const AP &... ap)
    {
        blue_print_.GET(route, compute_queue_id, handler, ap...);   
    }

    template<typename... AP>
    void GET(const std::string &route, const SeriesHandler &handler, const AP &... ap)
    {
        blue_print_.GET(route, handler, ap...);
    }

    template<typename... AP>
    void GET(const std::string &route, int compute_queue_id,
             const SeriesHandler &handler, const AP &... ap)
    {
        blue_print_.GET(route, compute_queue_id, handler, ap...);
    }

3、Httpserver 关键点

        TrackFunc 就是一个追踪函数的设置,可以打印函数的执行过程,void process(HttpTask *task); 为函数的执行过程,BluePrint blue_print_; 蓝图为实现的具体过程接口类

        

 好了,就介绍道这个地方了,剩余的需要自己看,自己理解了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VC(Visual C++)是微软公司推出的一款C++集成开发环境,被广泛应用于Windows平台的软件开发中。 VC应用资料源码包是指用于学习和研究VC应用开发的资料包,主要包含了一些示例程序的源代码和教学资料。 VC应用资料源码包的目的是帮助开发者更好地理解和掌握VC应用开发的技巧和知识。通过研究和分析源代码,开发者可以学习到如何使用VC编写各种类型的应用程序,包括图形界面程序、控制台程序、多线程程序等。 这些源码包不仅仅是一个展示,更是一个学习的工具。开发者可以通过阅读源代码、调试程序、修改代码等方式来加深对VC应用开发的理解。源码包中的示例程序覆盖了各个方面的知识点,从简单到复杂,逐步深入,帮助开发者逐步提高自己的编程水平。 同时,VC应用资料源码包还提供了详细的教学资料,包括了对示例程序代码的解析和说明,以及对相关知识点的介绍和讲解。这些教学资料可以帮助开发者更好地理解示例程序的背后原理和设计思路,从而能够更灵活地运用到自己的项目中。 总之,VC应用资料源码包是一份宝贵的学习资料,可以帮助开发者快速入门,并提高自己的VC应用开发技能。通过研究源码和教学资料,开发者可以更好地掌握VC应用开发的核心技术,为自己的软件开发之路打下坚实的基础。 ### 回答2: 在VC(Visual C++)应用资料源码包1中,包含了一些示例程序和相关资料,可以帮助学习者更好地理解和运用VC开发环境进行编程工作。 这个资料包涵盖了多个不同领域的应用程序源码,包括Windows窗体应用、多媒体应用、图形处理应用等。每个示例程序都提供了详细的代码和相关说明,可以作为学习与参考的优秀案例。 首先,这个资料包包含了一些用于开发Windows窗体应用的示例程序。通过这些示例,学习者可以了解窗体应用的基本框架和开发流程,包括窗体的创建、控件的添加和事件处理等。这些示例涵盖了常见的界面元素,如按钮、文本框和菜单等,同时也展示了如何在程序中实现更复杂的交互逻辑。 其次,资料包中还提供了一些多媒体应用的示例程序。这些程序展示了如何利用VC进行音频和视频处理,如音频录制、音频转换、视频播放等。学习者可以通过这些示例了解多媒体应用开发的基本原理和实践技巧,为自己的多媒体应用开发项目提供参考和指导。 此外,资料包还包括了一些图形处理应用的示例程序。这些示例展示了如何利用VC进行图像的加载、编辑和保存等操作,如图像滤波、图像转换和特效处理等。通过这些示例,学习者可以学会如何在程序中处理图像数据,为图像相关的应用开发提供基础和灵感。 综上所述,VC应用资料源码包1是一个非常有价值的学习资源,通过其中的示例程序和相关资料,学习者可以更好地理解和运用VC进行应用开发工作。无论是初学者还是有一定经验的开发者,都可以从中获得实用的知识和技巧,提升自己的编程能力。 ### 回答3: VC(Visual C++)是一种集成开发环境,用于开发C++程序。在VC应用资料源码包1中,通常包含了一些示例代码和项目文件,可以帮助开发者了解并运用VC进行项目开发。 这个资料源码包中的示例代码通常涵盖各个领域的开发,比如图形界面应用程序、控制台程序、游戏开发等等。通过阅读源码,可以学习到如何使用VC开发这些类型的应用程序,并且可以通过运行示例代码来观察程序的运行效果。 此外,源码包中通常还包含一些项目文件,这些项目文件是已经配置好的VC项目,可以直接打开并编译运行。通过打开这些项目文件,开发者可以了解项目的结构和配置信息,以及运行和调试项目的方式。对于初学者来说,这些项目文件的存在可以帮助他们更快地上手,并且理解如何配置和管理项目。 总而言之,VC应用资料源码包1提供了一些示例代码和项目文件,帮助开发者学习和应用VC进行各类应用程序的开发。通过阅读源码和运行示例代码,开发者可以加深对VC开发环境的理解,并且了解如何配置和管理项目。使用这个资料源码包,可以为开发者提供实践和学习的机会,促进他们在VC开发领域的成长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值