1

cURL に問題があります。私はcurl_multiパイプラインを有効にして使用しました(サーバーはそれをサポートしています)。しかし、10000 を超える単一の URL があり、ダウンロードする必要があります。私はそれほど多くの空きソケットを持っていません。これを処理する方法は?

について読みまし curl_multi_socket_actionたが、簡単な例やコードの変更方法が見つかりません

CURLM * curlm = curl_multi_init();

curl_multi_setopt(curlm, CURLMOPT_MAXCONNECTS, 3);
curl_multi_setopt(curlm, CURLMOPT_PIPELINING, 1);

std::vector<CURL_WRITE *> ptrArray;

std::map<MyStringAnsi, MyStringAnsi>::const_iterator it;
for (it = data[0].begin(); it != data[0].end(); it++)
{
    CURL_WRITE * curlData = new CURL_WRITE;
    curlData->dataIndex = &(it->first);
    curlData->threadID = 0;


    CURL * curl = InitSingleCURL(it->first, curlData);          
    curl_multi_add_handle(curlm, curl);

    ptrArray.push_back(curlData);
    curls.push_back(curl);
}


int still_running = 0;
/* lets start the fetch */
do 
{

    while(curl_multi_perform(curlm, &still_running) == CURLM_CALL_MULTI_PERFORM);
    #ifdef _WIN32
     Sleep(10);
    #else
     usleep(10);
    #endif
 } while (still_running);
4

1 に答える 1

1

まず、あなたはあまり説明していないため、答えるのが非常に難しくなっています。マルチ インターフェイスでは、一度にすべての転送を行う必要はありません。

libcurl 7.30.0 で追加されたCURLMOPT_MAX_TOTAL_CONNECTIONSは、おそらくあなたが望むものです。

于 2013-10-13T17:00:45.300 に答える