Беглым взглядом прошерстил списки встраиваемых http-серверов для C/C++ отсюда и отсюда. Показалось, что они практически все сделаны так, что когда для обработки GET или POST запроса вызывается пользовательский callback, то этот callback должен отработать синхронно, т.е. должен сразу отдать весь ответ на запрос. А вот такого, чтобы:
- http-сервер синхронно дернул callback на какой-то своей рабочей нити (соответственно, рабочая нить блокируется);
- callback инициировал асинхронную обработку запроса и вернул http-серверу некий future;
- рабочая нить http-сервера разблокируется и http-сервер получает возможность обрабатывать другие запросы;
- когда асинхронная обработка запроса завершается, future взводится;
- http-сервер обнаруживает факт того, что future взведен, забирает готовый ответ и отсылает его клиенту.
Вот такого прям с ходу не нашел. Может быть C++ REST SDK (aka Casablanca) от Microsoft это позволяет делать, надо будет внимательнее посмотреть, вроде бы там что-то похожее на task-based parallelism-а используется.
Может кто-то сталкивался с подобным встраиваемым http-сервером? Если ли такое вообще?
PS. Пикантность ситуации в том, что нужно именно C/C++, т.к. обработчики HTTP-запросов должны дергать довольно сложные C++ные вещи. Плюс VC++ и Windows на первом месте в списке поддерживаемых платформ. Посему библиотеки, заточенные только под Unix-ы и GCC/clang, идут лесом.
PPS. На всякий случай список ссылок, по которым прошелся:
- C++ REST SDK
- httpp
- onion
- civetweb
- cpp-netlib
- libmicrohttpd
- Poco
- proxygen
- restbed
- haywire (это отдельный HTTP-сервер на базе libuv)
- uvw (это C++14 header-only библиотека для удобной работы с libuv)
Комментариев нет:
Отправить комментарий