Table of Contents
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
控制器(controller)在web应用开发中处于相当重要的地位,它处理浏览器发来的请求,然后生成响应发送给浏览器;drogon框架已经帮我们处理好网络传输、Http协议的解析等等细节,我们只需要关注控制器的逻辑即可;每一个控制器对象可以有一个或者多个处理函数(一般称为handler),函数的接口,一般定义成如下形式:
void handlerName(const HttpRequestPtr &req,
std::function<void (const HttpResponsePtr &)> &&callback,
...);
其中,req
是Http请求的对象(被智能指针包裹),callback
是框架传给控制器的回调函数对象,控制器生成应答对象(也通过智能指针包裹)后,通过callback把该对象传给drogon,然后框架会帮你把响应内容发送给浏览器,最后面的是若干参数列表...
,由drogon根据映射规则把Http请求中的参数映射到对应的handler的形参上,这是对应用开发是非常方便的。
很明显,这是个异步接口,用户可以在其它线程完成耗时操作后再调用callback;
drogon的控制器分为三种类型,HttpSimpleController
,HttpController
和WebSocketController
,用户使用时,需要继承相应的类模板,比如,一个HttpSimpleController的自定义类"MyClass"声明如下:
class MyClass:public drogon::HttpSimpleController<MyClass>
{
public:
//TestController(){}
virtual void asyncHandleHttpRequest(const HttpRequestPtr &req,
std::function<void (const HttpResponsePtr &)> &&callback) override;
PATH_LIST_BEGIN
PATH_ADD("/json");
PATH_LIST_END
};
控制器的生命周期
注册到drogon框架的控制器最多只会有一个实例,在整个应用运行期间都不会销毁,所以,用户可以在控制器类中声明和使用成员变量。注意,控制器的handler被调用时,是在多线程环境下的(当框架的IO线程数配置成大于1的值时),如果需要访问非临时变量,请做好并发保护工作。
04.1 HttpSimpleController
Document
Tutorial
- Overview
- Install drogon
- Quick Start
- Controller
- Middleware and Filter
- View
- Session
- Database
- References
- Plugins
- Configuration File
- drogon_ctl Command
- AOP
- Benchmarks
- Coz profiling
- Brotli info
- Coroutines
- Redis
- Testing Framework
- FAQ