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。
因此,你的问题的答案是:是的!
当然,使用流水线操作,保持活动和重用资源可以更有效地执行顺序执行。 但这是另一个问题。