前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Civetweb安装使用

Civetweb安装使用

作者头像
Autooooooo
发布2021-12-07 14:37:55
1.6K0
发布2021-12-07 14:37:55
举报
文章被收录于专栏:CoxhuangCoxhuangCoxhuang

文章目录

Civetweb++

0 环境

Ubuntu 16.04
cmake 

👉👉👉 github demo

1 安装civetweb

git clone https://github.com/civetweb/civetweb.git
mkdir buildx && cd buildx
cmake -DCIVETWEB_ENABLE_CXX=ON -DBUILD_SHARED_LIBS=ON -DCIVETWEB_ENABLE_WEBSOCKETS=ON ..
make
sudo make install
  • CIVETWEB_ENABLE_CXX: 编译Cpp库,这样才会输出CivetServer.h
  • BUILD_SHARED_LIBS: 动态链接库
  • CIVETWEB_ENABLE_WEBSOCKETS: websocket

更多开关可查看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 {
        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;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • Civetweb++
  • 0 环境
  • 1 安装civetweb
  • 2 demo
  • 2.1 cmakelists.txt
  • 2.2 main.cc
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档