当前位置: 首页 > 科技观察

Drogon-一个真正现代的C++Web服务框架

时间:2023-03-13 05:17:49 科技观察

C++是最重要的编程语言之一。它既可以进行过程式编程、使用抽象数据类型的基于对象的编程,也可以进行以继承和多态为特征的面向对象编程。但是,由于标准库和社区生态方面的种种问题,C++在Web服务器端的发展并不尽如人意。同时,与其他语言相比,C++的服务端框架往往更加原始,对各种高级功能的支持也更加繁琐。C++14/17为这门语言提供了更多优秀的特性,使得实现更现代的Web框架成为可能。Drogon简介Drogon是an-tao在Github上开源的基于C++14/17的Http应用框架。当前版本为v1.4.1。Drogon是一个跨平台的框架,可以方便地使用C++构建各种类型的Web应用服务器程序。其网络层基于epoll,采用全异步编程模式;实现了简单的反射机制,支持后端渲染,支持运行时动态加载视图页面;支持过滤器链、websockets和流水线。·使用Drogon依赖非阻塞IO库trantor和jsoncpp、libuuid、zlib。使用CMake+Make编译安装Drogon:cd$WORK_PATHgitclonehttps://github.com/an-tao/drogoncddrogongitsubmoduleupdate--initmkdirbuildcdbuildcmake..make&&sudomakeinstall也可以直接在工程中使用Drogon源码,在cmake文件中添加project:add_subdirectory(third_party/drogon)arget_link_libraries(${PROJECT_NAME}PRIVATEdrogon)安装完成后,就可以开始用Drogon编写Web服务应用了。让我们看一个简单的主程序:#includeusingnamespacedrogon;intmain(){app().setLogPath("./").setLogLevel(trantor::Logger::kWarn).addListener("0.0.0.0",80).setThreadNum(16).enableRunAsDaemon().run();}通过链式配置生成应用实例,设置日志路径和级别,监听0.0.0.0:80,使用16线程,运行在后台。编译运行,我们可以得到一个HTTP服务。Drogon采用配置的思想,直接加载配置文件即可完成服务器的配置:app().loadConfigFile("./config.json").run();使用HTTP服务,我们必须编写一个处理函数来进行逻辑处理。我们编写了一个简单的控制器:#includeusingnamespacedrogon;classTestCtrl:publicdrogon::HttpSimpleController{public:virtualvoidasyncHandleHttpRequest(constHttpRequestPtr&req,std::function&&callback)override;PATH_LIST_BEGINPATH_ADD("/test",Get);PATH_LIST_END};该控制器继承HttpSimpleController,提供asyncHandleHttpRequest实现处理逻辑,注册到路径/test。然后,我们实现这个处理函数:voidTestCtrl::asyncHandleHttpRequest(constHttpRequestPtr&req,std::function&&callback){//writeyourapplicationlogichereauresp=HttpResponse::newHttpResponse();resp->setBody,"");resp->setExpiredTime(0);callback(resp);}这个处理函数新建一个response,设置内容为HelloWorld的HTML,设置过期时间。最后,回调用于返回HTTP响应。这样,我们就有了一个简单的HelloWorld服务。我们也可以很容易地实现一个RESTfulAPI的例子:api/v1/User/{arg1}METHOD_ADD(User::getDetailInfo,"/{id}/detailinfo",Get);//pathis/api/v1/User/{arg1}/detailinfoMETHOD_ADD(User::newUser,"/{name}",Post);//pathis/api/v1/User/{arg1}METHOD_LIST_END...}总结Drogon功能强大,对大量底层实现进行了封装和抽象,非常方便开发者调用各种功能及时,侧重于业务逻辑的实现。Drogon的设计向其他高级语言的现代Web框架看齐,充分应用了配置、动态化、自动化和解耦的思想,同时还提供了轻量级的ORM、模板引擎和命令行工具,可以说是一个非常全面的网络框架。