Подскажите, как сейчас модно работать с сетью на клиентах в C++? Future+корутины? Сложнее ли дебажить дефолтные c++20-корутины нежели обычные колбэки?
Я наделал воркер с curl_multi: берём запросы из очереди, состояние загрузки для UI обновляем атомиками, в конце коллбэк. В принципе терпимо, хоть и простое «скачать и распаковать» превращается в:
using AType = AssetsDL::Type;
template <AType ASSET_TYPE> //
struct AssetsCallbacks {
static void set_asset_zip_ready_to_unpack(...);
static void set_asset_unpacked_and_remove_zip(...);
static void job_asset_unpack();
static void on_zip_downloaded(...);
};
template <AType... Types> struct AssetsCallbacksTables {
static constexpr auto on_zip_downloaded_table =
std::array{&AssetsCallbacks<Types>::on_zip_downloaded...};
static constexpr auto job_asset_unpack_table =
std::array{&AssetsCallbacks<Types>::job_asset_unpack...};
};
using AssetsCbs =
AssetsCallbacksTables<AType::XAPIAN_TR, AType::OPTIONAL_XAPIAN_DE,
AType::OPTIONAL_TTS, AType::OPTIONAL_ASR>;
В моей, довольно простой ситуа, с коллбэками только одна проблема возникла: я перепутал порядок в шаблонных аргументах AssetsCallbacksTables и завяз на добрый час. Кроме ситуа1 «скачать+распаковать» мне требуется только ещё более простая ситуа ситуа2 «скачать в память и попарсить\подекодить немножк».
БЯМ пишет, что я рак и отдельный тред и атомики мне не нужны, а нужно звать curl_multi_perform на каждом кадре. БЯМ не знает, что у меня рендеринг по ивентам. Впрочем, бустить фпс на время запросов(+ троттлинг непосредственно рендеринга) и сильно упростить код — звучит неплохо!
Как бы вы сейчас писали подсистему сетевых запросов?







