libcurl可用于发出多个并发请求吗?

我在我的一个项目中使用libcurl。 我知道curl不是用于发出多个并发请求但是libcurl是否支持它?

我知道还有其他工具,比如ab,但是libcurl提供了许多function。 我再次知道我可以在脚本中使用curl来运行多个请求,但这不是我想要的。

我无法找到一个令人满意的答案。 虽然,这不是决定性的。

我应该可以使用多个句柄进行多个连接。

有没人试过这个? 有什么需要注意的问题吗?
我应该可以这样做:

my_app --total_connections 1000 --concurrency 100  url 

为了测试你在寻找什么,我写了一个小C程序。 它在循环中使用libcurl执行10个http-get请求。 使用openmp(如果可用)并行化循环。

要运行它,只需将其保存在一个名为parallel_curl_test.cpp的文件中并编译两次。 首先使用g++ parallel_curl_test.cpp -fopenmp $(pkg-config --libs --cflags libcurl) -o parallel_curl作为并行版本,第二次使用g++ parallel_curl_test.cpp $(pkg-config --libs --cflags libcurl) -o sequential_curl没有用于顺序版本的openmp。

这是代码:

 #include  #include  #include  #include  void curl_request(); size_t write_data(void *, size_t, size_t, void *); static struct timeval tm1; static int num_requests = 10; static inline void start() { gettimeofday(&tm1, NULL); } static inline void stop() { struct timeval tm2; gettimeofday(&tm2, NULL); unsigned long long t = 1000 * (tm2.tv_sec - tm1.tv_sec) + (tm2.tv_usec - tm1.tv_usec) / 1000; printf("%d requests in %llu ms\n",num_requests , t); } int main() { start(); #pragma omp parallel for for(int n=0; n 

./parallel_curl的输出如下所示:

 10 requests in 657 ms 

./sequential_curl的输出将如下所示:

 10 requests in 13794 ms 

正如您所看到的,使用并发的parallel_curl完成速度明显快于sequential_curl执行的sequential_curl。

因此,你的问题的答案是:是的!

当然,使用流水线操作,保持活动和重用资源可以更有效地执行顺序执行。 但这是另一个问题。