Drogon简介

Drogon是一个基于C++17/20的Http应用框架,专门用于构建高效的Web应用和服务端程序

  • 网络层使用基于epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高并发、高性能的网络IO。

安装

1
2
3
4
5
6
7
8
9
10
11
12
#安装依赖(Ubuntu示例)
sudo apt install -y gcc g++ cmake libssl-dev libjsoncpp-dev uuid-dev zlib1g-dev
#克隆仓库
git clone https://github.com/drogonframework/drogon.git
cd drogon
git submodule update --init
#编译安装(约5-10分钟)
mkdir build
cd build
cmake ..
make -j$(nproc)
sudo make install

引入CMake

由于项目越发复杂,再手动编写makefile过于繁琐,因此开始使用CMkae进行项目构建,并且配合makefile进行快速重新构建项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
cmake_minimum_required(VERSION 3.12)
project(server)

# C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -flto") # 链接时优化
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # IPO优化

# 包含目录设置
include_directories(
/usr/include # 显式添加常见路径
/usr/local/include # 第三方库常见安装位置
)

# 查找依赖库
find_package(Threads REQUIRED)
# 查找Drogon依赖
find_package(Drogon REQUIRED COMPOMENTS jsoncpp)

set(CONTROLLERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/controllers")
message(STATUS "控制器路径是: ${CONTROLLERS_DIR}")

# 添加可执行文件
add_executable(
server
DatabaseClient.cpp
logger.cpp
main.cpp
RedisClient.cpp
# ${CONTROLLERS_DIR}/btyGoose_TestCtrl.cc
)

target_link_libraries(server
PRIVATE
mysqlcppconn
Threads::Threads
gflags
fmt
redis++
hiredis
Drogon::Drogon
${JSONCPP_LIBRARIES}
${OPENSSL_LIBRARIES}
)


创建控制器类

1
2
3
4
5
6
7
8
# 当前位置:BeautyGoose/Server/server/src
mkdir controllers && cd controllers
drogon_ctl create controller -h btyGoose::TestCtrl
drogon_ctl create controller -h btyGoose::AccountCtrl
drogon_ctl create controller -h btyGoose::ConsumerCtrl
drogon_ctl create controller -h btyGoose::MerchantCtrl
drogon_ctl create controller -h btyGoose::AdminCtrl

解决宏定义冲突问题

原本的日志的宏定义与trantor中的宏定义冲突,所以需要修改原本的宏定义,加上前缀SUP_防止冲突