Асинхронная обработка запросов с использованием многопоточности - PullRequest
0 голосов
/ 28 марта 2019

Я работаю над модулем, который использует 10 очередей для обработки потоков, и каждая из них отправляет запросы curl, используя интерфейс curl_easy (вместе с Lock), чтобы; одиночное соединение поддерживается до тех пор, пока ответ не получен. Я хочу улучшить обработку запросов, используя интерфейс curl_multi, где запросы curl отправляются потоком и обрабатываются параллельно.

Я создал отдельный код для его реализации. Например, я создал 3 потока, которые обрабатываются один за другим, первый поток отправляет запрос curl_multi до тех пор, пока он не будет запущен, и существуют существующие передачи, которые распределяют ресурсы с использованием интерфейса curl_easy для каждой передачи.

Я рассмотрел много примеров, но не могу понять, как реализовать это в C ++. Кроме того, поскольку я недавно изучил концепции многопоточности и скручивания в C ++, мне нужна помощь с этим подходом.

Я ожидаю, что один поток сможет отправлять запросы curl до тех пор, пока пользователь не прекратит отправку.

Обновление - я добавил два потока, и каждый отправляет два запроса одновременно. curl_multi обрабатывается массивом дескрипторов для curl_easy. Я хочу, чтобы он не содержал массивов, потому что это ограничивает количество запросов.

Может ли он быть сделан асинхронным и принимать все передачи и выходить только тогда, когда это делает клиент / пользователь. Примеров curl_multi достаточно, поэтому я не уверен в его реализации.

1 Ответ

0 голосов
/ 28 марта 2019

Читая документацию curl_multi , кажется, что для этого не нужно создавать различные потоки, поскольку это работает с помощью нескольких простых дескрипторов, добавленных к объекту multi handle. Затем вы звоните curl_multi_perform, чтобы начать все переводы неблокирующим способом.

Я ожидаю, что один поток сможет отправлять запросы curl до тех пор, пока пользователь не прекратит отправку.

Я не понимаю, что вы подразумеваете под этим, вы имеете в виду, что вы просто хотите сохранить эти связи, пока все не будет передано? Если это так, curl_multi уже дает вам информацию о ходе ваших переводов, которая может помочь вам определить, что делать.

Надеюсь, это поможет

...