Comments 24
есть ещё подобный фреймворк на плюсах https://www.webtoolkit.eu/wt
А на Qt есть хорошие фреймворки?
Из живых я сейчас нашёл только Cutelyst
а зачем на qt бэкэнд писать?
Тема корутин не раскрыта. Какую библиотеку используете? Или stackless из C++?
Фреймворк поддерживает встроенные корутины из C++20: -std=c++20 -fcoroutines
А они вообще юзабельные?
Например, если нужно сделать запрос к базе данных, в wiki используется future.get() - блокирующая операция. Она весь сервер подвесит, или там под капотом какая-то магия есть, чтобы остальные запросы продолжили обрабатываться? Плохо представляю, как такое сделать на stackless корутинах.
Если очень простой пример привести:
Task<HttpResponsePtr> getUsersAsync(const HttpRequestPtr &request) {
auto sql = app().getDbClient();
auto result = co_await sql->execSqlCoro(
"SELECT COUNT(*) FROM users;"
);
Json::Value jsonBody;
jsonBody["users_count"] = result[0][0].as<size_t>();
auto response = HttpResponse::newHttpJsonResponse(jsonBody);
co_return response;
}
Под капотом там EventLoop с менеджером пулла потоков. Во внутреннем обработчике запроса используется co_await, но при этом этот обработчик вызывается без каких-либо блокировок
UPD: насчёт использования - вроде работает. Как я писал, фреймворк в продакшн я не видел, а с экспериментальными корутинами тем более
OK, а POCO из pocoproject.org подходит под критерии поиска фремворка в статье? Я вот на нём делаю...
Была у меня мечта - писать backend на C++. А вот разбираться в unix socket'ах, TCP, многопоточной/асинхронной обработке запросов и во многом другом совсем не хотелось.
Простите, а в чем прикол мечты писать бэк на плюсах и не разбираться в сокетах, сетях и прочем?
В том, чтобы не писать очередной велосипед. Я, конечно, не отрицаю, что знание сокетов, протоколов и тд нужны, но делать реализацию стоит только в том случае, когда есть в этом необходимость, например, разного рода оптимизаций, написание своего протокола поверх TCP и тп. А когда стоит вопрос, что нужно просто написать бэкенд, а разработчики в команде знают только плюсы, то почему бы не взять фреймворк, который скрывает всю реализацию, оставляя бизнес-логику на разработчиках
А где применяется бекэнд на C++ ? Мне думается, что это должен быть не самый тривиальный сценарий.
Или просто just4fun ?
Любая сколь нибудь популярная игра
Например, онлайн игры. А вообще в крупных компаниях бывают пишут бэкенд на плюсах. А ответ на вопрос - зачем? Не смогу ответить, наверное, или что-то кастомное (протокол, например), или увеличение перформанса
Главная причина -- интерфейс к развесистым C/C++ библиотекам.
Очень простой и легковесный фреймворк https://github.com/yhirose/cpp-httplib/. Header only.
Но он всё же с block I/O. Drogon предоставляет Thread Pull Manager и в каждом потоке Event Loop для non-block I/O
Этот фреймворк очень хорошо смотрится в рейтинге
Простой backend на C++: это возможно?