-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
CHN 04 0 控制器 简介
ProTankerAlfa edited this page May 20, 2024
·
3 revisions
控制器(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
- 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