# cpp-http **Repository Path**: JimmyH/cpp-http ## Basic Information - **Project Name**: cpp-http - **Description**: a simple cpp http server framework - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2016-04-09 - **Last Updated**: 2022-06-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #A SIMPLE CPP HTTP SERVER FRAMEWORK ##cpp htpp server framework是什么? 一个简单的c++的http服务器开发框架, 利用boost::regex实现简单的路由检索, 以app插件的形式提供相应的服务 ##cpp http server framework有哪些功能? * 方便的路由设计 * 简单的正则表达式就可实现可用的url设计 * 可热插拔的app加载模块 * 应用的基础结构为动态库(.dll/.so), 通过显式加载动态库,注册相应的url节点信息, 进行url解析 * 内置简单的app管理模板, 可通过web管理服务器的app加载与卸载, 实现cpp应用的热更新 ##开发环境要求 * boost1.49.0以上 * windows平台 * vs2012 + Microsoft Visual C++ Compiler Nov 2012 CT * vs2013以上 * linux平台 * gcc4.8.2以上 ##关于作者 * QQ: 329302080 #####下面是一个app的模板, 定义了一个url为host/template/hello/, 浏览器中打开后显示经典hello world app_template.h ```cpp #pragma once #ifdef WIN32 #define APP_API __declspec(dllexport) #define APP_FUNC extern "C" APP_API #else #define APP_API #define APP_FUNC extern "C" #endif // WIN32 #include "router.h" #include "logging.h" class APP_API app_user : public router_family { public: app_user(void); }; //下面三个方法必须按此模板定义 APP_FUNC router_family* create_app(void); APP_FUNC void set_logging_instance(logging& log); void delete_app(void); //用于linux下关闭动态库时清理数据 #ifndef WIN32 APP_FUNC void _finit(); #endif ``` app_template.cpp ```cpp #ifdef WIN32 #include "stdafx.h" #endif // WIN32 #include "app_user.h" #include "json/json.h" app_user* app; logging* dlllog; APP_FUNC router_family* create_app(void) { if (nullptr == app) app = new app_user; return app; } APP_FUNC void set_logging_instance(logging& log) { dlllog = &log; } void delete_app(void) { delete app; app = nullptr; } #ifndef WIN32 APP_FUNC void _finit() { delete_app(); } #endif // !WIN32 app_user::app_user() : router_family("app_template", boost::regex("^/template/")) { regist_router(new router_child("hello", boost::regex("^hello/"), [](const request& req, response& res) { LOGI("url: host/template/hello/"); res.render(200, "hello world"); })); } ``` ###模板工程项目 * [template project](http://git.oschina.net/JimmyH/cpp_http_server_app_template) ###效果展示 * 忽略它的简陋 ==! * windows下app管理页面 ![](http://git.oschina.net/JimmyH/cpp_http_server/attach_files/download?i=28287&u=http://files.git.oschina.net/group1/M00/00/BA/ZxV3aVcHRP6AHdYaAAAgH5Es4dw418.png?token=0dc95b865f893d550f0f29abeaa3f153&ts=1460094072&attname=app_admin.png) * linux下app管理页面 ![](http://git.oschina.net/JimmyH/cpp_http_server/attach_files/download?i=28289&u=http://files.git.oschina.net/group1/M00/00/BA/ZxV3aVcHR_qAKHbFAAAh56qBPis291.png?token=e80d57ce1692c05dd440a9349b019dc5&ts=1460094876&attname=linux_app_admin.png) * app_template 浏览器中展示 ![](http://git.oschina.net/JimmyH/cpp_http_server/attach_files/download?i=28286&u=http://files.git.oschina.net/group1/M00/00/BA/ZxV3aVcHRPGACN-dAAAd6NZFseU050.png?token=e431b4cab6094a8e8a9479562f69f7e5&ts=1460094072&attname=hello.png)