135 Star 1.1K Fork 350

GVP搜狗开源 / workflow

 / 详情

WF编程小示例3: 延迟返回的server

待办的
成员
创建于  
2021-07-06 23:48

在我们首页上我们展示了一个最简单的http server。我们在这里想做一点小修改,让server延迟一秒才返回hello world页面。如果process里直接sleep一秒,好像可以满足我们的需求,但此时如果我们向server发送大量http请求,server的所在处理线程就都进入了睡眠,请求也就都要排队处理了。实际上,我们只要结合示例2中的timer任务,就可以完美实现了一个不占用线程的延迟返回server:

#include <stdio.h>
#include "workflow/WFTaskFactory.h"
#include "workflow/WFHttpServer.h"

int main()
{
    WFHttpServer server([](WFHttpTask *task) {
        task->get_resp()->append_output_body("<html>Hello World!</html>");
        series_of(task)->push_back(WFTaskFactory::create_timer_task(1000000, nullptr));
    });

    if (server.start(8888) == 0) {  // start server on port 8888
        getchar(); // press "Enter" to end.
        server.stop();
    }

    return 0;
}

大家应该还记得,上一个示例中我们说过,任何运行中的任务一定处在某个series里。server任务也不例外。而server的回复时机,并不是process函数的结束,而是在server任务所在的series已经没有任务的时候。那么,我们只需要简单的在这个series里加入一个定时器,定时器将在process函数之后被拉起,并且在定时结束之后回复请求(series已空)。通过向server任务所在series里添加任务的方法,我们可以轻松实现任意复杂的异步server逻辑。
通过这几个示例,应该可以看出来我们client和server任务的高度统一。之后的示例里,我们还会展示系统里更多的统一与对称设计。大家不要走开!

评论 (0)

xiehan 创建了任务
xiehan 关联仓库设置为搜狗开源/workflow
展开全部操作日志

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
C++
1
https://gitee.com/sogou/workflow.git
git@gitee.com:sogou/workflow.git
sogou
workflow
workflow

搜索帮助