代码拉取完成,页面将自动刷新
在我们首页上我们展示了一个最简单的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任务的高度统一。之后的示例里,我们还会展示系统里更多的统一与对称设计。大家不要走开!