当我尝试使用curlpp执行大量同步https请求时,出现以下错误:
无法连接到https://www.google.com/端口443:没有通往主机的路由
下面的代码当然只是实际代码的精简示例。网址不同,但结果相同。
void ThreadFunction()
{
try
{
curlpp::Cleanup myCleanup;
std::ostringstream os;
os << curlpp::options::Url("https://www.google.com/");
}
catch( curlpp::RuntimeError &e )
{
std::cout << e.what() << std::endl;
}
catch( curlpp::LogicError &e )
{
std::cout << e.what() << std::endl;
}
}
int main(void)
{
thread threads[10];
int loops = 0;
while(loops < 3000)
{
for(int i = 0; i < 10; i++)
{
threads[i] = thread(ThreadFunction);
}
for(int i = 0; i < 10; i++)
{
threads[i].join();
}
loops++;
}
return 0;
}
错误并非从一开始就直接发生,而是在循环〜1000附近发生。之后,每个请求都会生成此错误。我尝试为每个线程使用不同的端口(例如80),但是curlpp似乎仅使用端口443执行https请求。当仅运行一个线程时,一切似乎都很好(除非它花费的时间太长,因此需要多个线程)。
所以我的理论A:实际上可以执行这样的同步请求,但是在请求之后我缺少一些端口的关闭/清理功能。 (我的意思是,它适用于第一个〜1000 * 10个请求)
理论B:不可能同时在同一端口上执行请求 ,但是线程恰好在稍稍使用同一端口的情况下不同的时间(直到不是,直到〜1000)
或C:根本不允许,在一堆请求之后,一些网络霸主已经受够了,并阻止了新请求。
我必须承认,我在网络方面的知识有限,无法在这里查明原因或找到解决方案。处理这样的任务的最佳方法是什么?任何帮助表示赞赏。