LINUX.ORG.RU

А HTTP запросы в C++?

 , , , ,


0

2

Подскажите, как сейчас модно работать с сетью на клиентах в 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 на каждом кадре. БЯМ не знает, что у меня рендеринг по ивентам. Впрочем, бустить фпс на время запросов(+ троттлинг непосредственно рендеринга) и сильно упростить код — звучит неплохо!

Как бы вы сейчас писали подсистему сетевых запросов?

Это какой-то сраный ад. Что код этот, что вообще постановка такого вопроса. У какого языка кроме крестов нет нормального http клиента в 2026? Мне сложно даже такой назвать

lovesan ★★☆
()
Ответ на: комментарий от Reset

Это прекрасненько. Обожаю C++ в вебе.

У меня либа ещё и с корутинами C++20, чтобы в процедурном стиле писать походы в свои СУБД.

Ещё знаю прикол - какие-то шизоиды в 2000-х на физтехе МФТИ написали на C++ форум, там совсем люто сделано: бинарник рендерит HTML и данные хранит в каких-то файлах бинарных на диске, то есть даже коннекта к СУБД нет. Это было зверско и работало лет 20, в последний раз я это видел по адресу https://zlo.rt.mipt.cc/ - сейчас что-то плохо открывается, может забанено или может переехали или может надо VPN или может оно наконец сломалось после стольких лет)

UPD: только я это запостил и https://zlo.rt.mipt.cc/?index снова летает. Бугага.

tcpfinhello
()
Последнее исправление: tcpfinhello (всего исправлений: 2)
Ответ на: комментарий от BruteForce

твой пример онли http, подозреваю причина использования curl что сервер может быть https.

s-warus ★★★★★
()
Ответ на: комментарий от BruteForce

Это всё пердь. У меня HTTP клиент на C++ умеет HTTPS достаточно простым движением руки через libopenssl кажется. Там пришлось повоевать с конечным автоматом и то скорее всего у меня всё сделано через джоппу и в какой-то момент развалится, но на web.telegram.org я ходил успешно реализуя TG-бота на C++ и какие-то форумы парсил немного этим клиентом. В зависимостях нифига нет. HTTPS-сервер я не осилил, но мне было и не надо, стоял nginx на фронте и заворачивал мне в HTTP всё это.

USERVER:

  1. они там поюзали boost чисто исторически, что является фатальной ошибкой в современном мире, ибо примерно всё из буста есть и без буста (что нужно вменяемому человеку). Это чисто исторический прикол, понанимают с улицы двоечников, бывает.

  2. Далее, они запаковали в свою штуку кучу клиентов к разным базунькам: postgres, mongodb, redis, LDAP, kafka, sqlite3, чтение всяких форматов, схем сжатия и yaml, вот его и раздуло как тварь.

tcpfinhello
()
  • Markdown
Пустая строка (два раза Enter) начинает новый абзац. Знак '>' в начале абзаца выделяет абзац курсивом цитирования.
Внимание: прочитайте описание разметки Markdown.
Используйте Ctrl-Enter для размещения комментария