【发布时间】:2014-08-08 22:10:24
【问题描述】:
我已经开始使用curl 同步进行http 请求。我的问题是如何异步执行?
我做了一些搜索,从这个question 和这个example 中找到了curl_multi_* 接口的文档,但它根本没有解决任何问题。
我的简化代码:
CURLM *curlm;
int handle_count = 0;
curlm = curl_multi_init();
CURL *curl = NULL;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "https://stackoverflow.com/");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback);
curl_multi_add_handle(curlm, curl);
curl_multi_perform(curlm, &handle_count);
}
curl_global_cleanup();
回调方法writeCallback 没有被调用,也没有任何反应。
请给我建议。
编辑:
根据@Remy 的以下回答,我得到了这个,但似乎它并不是我真正需要的。因为使用循环仍然是阻塞的。如果我做错了或误解了什么,请告诉我。我实际上对 C++ 很陌生。
这是我的代码:
int main(int argc, const char * argv[])
{
using namespace std;
CURLM *curlm;
int handle_count;
curlm = curl_multi_init();
CURL *curl1 = NULL;
curl1 = curl_easy_init();
CURL *curl2 = NULL;
curl2 = curl_easy_init();
if(curl1 && curl2)
{
curl_easy_setopt(curl1, CURLOPT_URL, "https://stackoverflow.com/");
curl_easy_setopt(curl1, CURLOPT_WRITEFUNCTION, writeCallback);
curl_multi_add_handle(curlm, curl1);
curl_easy_setopt(curl2, CURLOPT_URL, "http://google.com/");
curl_easy_setopt(curl2, CURLOPT_WRITEFUNCTION, writeCallback);
curl_multi_add_handle(curlm, curl2);
CURLMcode code;
while(1)
{
code = curl_multi_perform(curlm, &handle_count);
if(handle_count == 0)
{
break;
}
}
}
curl_global_cleanup();
cout << "Hello, World!\n";
return 0;
}
我现在可以同时执行 2 个 http 请求。回调被调用,但仍需要在执行以下行之前完成。我需要考虑线程吗?
【问题讨论】:
标签: c++ curl asynchronous libcurl