我有应用程序,它使用libcurl进行网络连接,使用libcef进行渲染。
一切正常,除了一个问题:如果在初始化libcef之后使用libcurl,https请求将花费大量时间(超过一秒)。
这是最小的代码,它说明了问题:
#include <curl/curl.h>
#include <iostream>
#include "include/cef_app.h"
class MyCefApp: public CefApp
{
private:
IMPLEMENT_REFCOUNTING(MyCefApp);
};
int main()
{
CefMainArgs main_args;
CefRefPtr<CefApp> App = new MyCefApp();
CefExecuteProcess(main_args, App, NULL);
CefSettings settings;
CefInitialize(main_args, settings, App, NULL);
CURL *curl;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "https://google.com");
curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER, 0L);
curl_easy_perform(curl);
double val;
curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &val);
std::cout<<"CURLINFO_APPCONNECT_TIME: "<<val<<" sec.";
curl_easy_cleanup(curl);
return 0;
}
应用程序输出将如下:
CURLINFO_APPCONNECT_TIME:1.29秒
但是当行
CefInitialize(main_args, settings, App, NULL);
将被注释,或者在cef块之前放置curl块,输出将如下:
CURLINFO_APPCONNECT_TIME:0.38秒
如果我使用非ssl版本的google,问题就会消失。
我用:
libcurl/7.48.0 OpenSSL/1.0.1s zlib/1.2.8
使用
构建的Libcurlmode=dll VC=14 WITH_SSL=dll WITH_ZLIB=dll ENABLE_SSPI=no ENABLE_IPV6=yes ENABLE_IDN=no ENABLE_WINSSL=no GEN_PDB=no DEBUG=no MACHINE=x86
在Windows 7上使用VS 2015社区版本构建libcurl,openssl,zlib和libcef。
有人能指出我,为什么ssl请求表现得那样? 感谢。