LibCurl WriteCallback (Async?) - C++

Jos*_*ain 5 c++ curl libcurl

我使用以下代码成功进行了 http POST 调用:

std::string curlString;
CURL* pCurl = curl_easy_init();

if(!pCurl)
    return NULL;

string outgoingUrl = Url;
string postFields = fields;

curl_easy_setopt(pCurl, CURLOPT_TIMEOUT, 0);

curl_easy_setopt(pCurl, CURLOPT_URL, outgoingUrl.c_str());
curl_easy_setopt(pCurl, CURLOPT_POST, 1);

curl_easy_setopt(pCurl, CURLOPT_POSTFIELDS, postFields.c_str());
curl_easy_setopt(pCurl, CURLOPT_POSTFIELDSIZE, (long)postFields.size());

curl_easy_setopt(pCurl, CURLOPT_WRITEFUNCTION, CurlWriteCallback);
curl_easy_setopt(pCurl, CURLOPT_WRITEDATA, &curlString);

curl_easy_perform(pCurl);

curl_easy_cleanup(pCurl);
Run Code Online (Sandbox Code Playgroud)

写回调具有以下原型:

size_t CurlWriteCallback(char* a_ptr, size_t a_size, size_t a_nmemb, void* a_userp);
Run Code Online (Sandbox Code Playgroud)

有没有办法异步执行此操作?当前,它会在 curl_easy_perform 返回之前等待回调完成。这种阻塞方法不适用于有很多用户的服务器。

Fri*_*dFX 5

来自libcurl 简单文档:

当所有设置完成后,您告诉 libcurl 使用curl_easy_perform(3) 执行传输。然后它将执行整个操作,并且在完成(成功与否)之前不会返回。

libcurl 多接口文档中,与“简单”接口相反的功能之一:

  1. 在同一线程中启用多个同时传输,而不会使应用程序变得复杂。

听起来你想使用“多重”方法。

  • 在 C++ 中使用多接口的示例可以在 http://www.godpatterns.com/2011/09/asynchronous-non-blocking-curl-multi.html 找到 (2认同)