Civetweb安装使用

Civetweb++

#0 环境

Ubuntu 16.04
cmake 
  • Civetweb Demo

👉👉👉 github demo

  • 针对Ubuntu/macOS环境下的C++ Web Server开发, 结合Civetweb + Baidu Apollo, 这里单独封装了一个库(Typhoon)

👉👉👉 typhoon C++ Web Server

#1 安装civetweb

git clone https://github.com/civetweb/civetweb.git
git checkout trunk
mkdir buildx && cd buildx
cmake -DCIVETWEB_ENABLE_CXX=ON -DBUILD_SHARED_LIBS=ON -DCIVETWEB_BUILD_TESTING=OFF -DCIVETWEB_ENABLE_WEBSOCKETS=ON ..
make
sudo make install
  • BUILD_SHARED_LIBS: 动态链接库

更多开关可查看src/CmakeLists.txt文件

在这里插入图片描述

#2 demo

#2.1 cmakelists.txt

cmake_minimum_required(VERSION 3.17)
project(civetweb_demo)

set(TARGET_NAME ${PROJECT_NAME})

set(CMAKE_CXX_STANDARD 14)
find_package(PkgConfig REQUIRED)
find_package(civetweb REQUIRED)
find_package(Boost REQUIRED COMPONENTS system thread)
pkg_check_modules(NLOHMANNJSON REQUIRED nlohmann_json)

include_directories(
    ${Boost_INCLUDE_DIRS}
    ${NLOHMANNJSON_INCLUDE_DIRS}
    ${civetweb_INCLUDE_DIR}
)

link_directories (
    ${Boost_LIBRARY_DIRS}
    ${NLOHMANNJSON_LIBRARY_DIRS}
    /usr/local/lib
)

aux_source_directory(src ENGINE_SOURCE_DIRS)
aux_source_directory(include HTTP_ENGINE_SOURCE_DIRS)

add_library(${TARGET_NAME} SHARED
    ${HTTP_ENGINE_SOURCE_DIRS}
    ${ENGINE_SOURCE_DIRS}
)

target_link_libraries(${TARGET_NAME}
    libcivetweb-cpp.so
    libcivetweb.so
    ${Boost_LIBRARIES}
    ${NLOHMANNJSON_LIBRARIES}
)

add_executable(${TARGET_NAME}_runner main.cc)

target_link_libraries(${TARGET_NAME}_runner
    ${TARGET_NAME}
)

#2.2 main.cc

#include <memory>
#include <unistd.h>
#include <nlohmann/json.hpp>
#include "CivetServer.h"


class OkView : public CivetHandler{
public:
    bool handleGet(CivetServer *server, struct mg_connection *conn) override {
        nlohmann::json json_data;
        json_data["msg"] = "ok";
        std::string s = json_data.dump(0);

        char* c = const_cast<char*>(s.c_str());
        mg_send_http_ok(conn, "application/json; charset=utf-8", s.size());
        mg_write(conn, c, s.size());
        return true;
    }
    bool handlePost(CivetServer *server, struct mg_connection *conn) override {
    	auto data = CivetServer::getPostData(conn); // post request data
        return true;
    }
    bool handlePut(CivetServer *server, struct mg_connection *conn) override {
        return true;
    }
};

class HttpServer {
public:
    HttpServer() {
        mg_init_library(0);
        std::vector<std::string> options = {
                "document_root",".",
                "listening_ports","10022"
        };
        m_server = std::make_unique<CivetServer>(options);
    }
    ~HttpServer() {
        m_server->close();
    }

    void run() {
        OkView ok_view;
        m_server->addHandler("/api/ok/", ok_view);
        while (true) {
            sleep(1);
        }
        mg_exit_library();
    }

private:
    std::unique_ptr<CivetServer> m_server;
};


int main() {
    std::cout << "Hello, Civetweb!" << std::endl;
    HttpServer server;
    server.run();
    return 0;
}

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值