README.md

onyxup

Микро фреймворк для разработки веб приложений

Используемые сторонние библиотеки

Plog - portable, simple and extensible C++ logging library

PicoHTTPParser - tiny HTTP parser

Gzip C++ lib for gzip compression and decompression

JSON for modern C++

Зависимости

sudo apt-get install zlib1g-dev
sudo apt-get install libcurl3-dev (only for tests)

Установка последней версии:

mkdir build
cd build/
cmake ..
make
sudo make install

Установка и запуск тестов:

mkdir build
cd build/
cmake -DBUILD_TESTING=on  ..
make
make test
sudo make install

Установка в режиме debug:

mkdir build
cd build/
cmake -DBUILD_DEBUG_MODE=on  ..
make
make test
sudo make install

Пример использования:

#include <onyxup/server/server.h>
#include <onyxup/server/utils.h>
#include <onyxup/response/response-json.h>
#include <onyxup/response/response-html.h>
#include <onyxup/response/response-file.h>
#include <string>

onyxup::ResponseBase html(onyxup::PtrCRequest request);

onyxup::ResponseBase json(onyxup::PtrCRequest request);

onyxup::ResponseBase file(onyxup::PtrCRequest request);

onyxup::ResponseBase params(onyxup::PtrCRequest request);

onyxup::ResponseBase multipartForm(onyxup::PtrCRequest request);

int main() {

    onyxup::HttpServer server(7000, 16);

    /*
     * Routes
     */
    server.addRoute("GET", "^/html$", html, onyxup::EnumTaskType ::LOCAL_TASK);
    server.addRoute("GET", "^/json", json, onyxup::EnumTaskType ::LOCAL_TASK);
    server.addRoute("GET", "^/file$", file,onyxup::EnumTaskType ::LOCAL_TASK);
    server.addRoute("GET", "^/params.+$", params,onyxup::EnumTaskType ::LOCAL_TASK);
    server.addRoute("POST", "^/multipart-form", multipartForm, onyxup::EnumTaskType ::LOCAL_TASK);
    /*
     * Route для статических файлов
     */
    server.addRoute("GET", "^/static/.+$", onyxup::HttpServer::defaultStaticResourcesCallback, onyxup::EnumTaskType ::STATIC_RESOURCES_TASK);

    /*
     * Путь до расположения статических файлов
     */
    std::string pathToStaticFiles = "/project/";
    onyxup::HttpServer::setPathToStaticResources(pathToStaticFiles);

    /*
    *   Максимальное время выполнения запроса на сервер (по умолчанию 60 с)
    */
    onyxup::HttpServer::setTimeLimitRequestSeconds(30);

    /*
    *   Масимальное количество задач в очереди на сервере (по умолчанию 100)
    */
    onyxup::HttpServer::setLimitLocalTasks(100);

    /*
     * Включаем сбор статистики и указываем url доступа (по умолчанию "^/onyxup-status-page$")
     */
    onyxup::HttpServer::setStatisticsEnable(true);
    onyxup::HttpServer::setStatisticsUrl("^/statistics$");

    server.run();
}

onyxup::ResponseBase html(onyxup::PtrCRequest request) {
    return onyxup::ResponseHtml("index.html");
}

onyxup::ResponseBase json(onyxup::PtrCRequest request) {
    return onyxup::ResponseJson(R"({"status":"success"})", true);
}

onyxup::ResponseBase file(onyxup::PtrCRequest request) {
    std::string pathToFile;
    return onyxup::ResponseFile(pathToFile);
}

onyxup::ResponseBase params(onyxup::PtrCRequest request) {
    /*
     * Запрос /params?param-first=1&param-second=data
     */
    auto & params = request->getParams();
    if(params.find("param-first") != params.end()){
        int param1 =  std::stoi(params.at("param-first"), nullptr);
        std::cout << "Param first = " << param1 << std::endl;
    }
    if(params.find("param-second") != params.end()){
        std::string param1 =  params.at("param-second");
        std::cout << "Param second = " << param1 << std::endl;
    }
    return onyxup::ResponseJson(R"({"status":"success"})");
}

onyxup::ResponseBase multipartForm(onyxup::PtrCRequest request) {
    auto fields = onyxup::utils::multipartFormData(request);
    std::vector<char> data = fields["image"].getData();
    std::string filename = "./" + fields["image"].getFilename();
    std::ofstream f(filename, std::ios::binary);
    std::copy(data.begin(), data.end(), std::ostream_iterator<char>(f, ""));
    return onyxup::ResponseJson(R"({"status":"success"})", true);
}

Лицензия

MIT License

Описание

Micro framework for developing web applications

Конвейеры
0 успешных
0 с ошибкой