Ubuntu 16.04
cmake
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
CivetServer.h
websocket
库更多开关可查看
src/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}
)
#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;
}