我已经使用Pocos HTTP库编写了一个简单的应用程序。该应用程序从给定的源下载文件,对其进行解密,然后将其上传到S3。有成千上万的文件需要以这种方式进行处理,并且自它们出现在源服务器上起,最多必须完成7天。为了避免使我的应用程序线程化的麻烦,我决定只启动应用程序的多个进程(最多16个)。
我遇到的问题是某些文件随机无法完全下载或无法解密,很可能是由于文件损坏导致的。
我在Visual Studio调试器中运行了该应用程序的一个实例,并使其运行了48小时,并下载了近1200个文件。没有一个错误。没有不完整的下载,没有错误的解密。但是,一旦我启动了应用程序的更多进程(通常是4个以上的进程),我就会开始收到上面报告的错误。
我不确定Poco是在做奇怪的事情还是Windows出现了错误,我很困惑如何验证网络争用是问题以及如何解决(显然是负载平衡,但是没有出现一种限制应用程序使用带宽百分比的方法。
这是我正在使用的下载代码:
URI uri(DownloadRequestURL);
HTTPClientSession session(uri.getHost(), uri.getPort());
HTTPRequest req(HTTPRequest::HTTP_GET, DownloadRequestURL, HTTPMessage::HTTP_1_1);
session.setKeepAlive(true);
HTTPResponse response;
istream* fileStream;
try
{
session.sendRequest(req);
fileStream = &session.receiveResponse(response);
}
catch (NetException& exc)
{
return false;
}
catch (...)
{
return false;
}
HTTPResponse::HTTPStatus status = response.getStatus();
if (status != HTTPResponse::HTTPStatus::HTTP_OK)
{
return false;
}
ofstream encryptedFile(Filename, std::ios::out | std::ios::binary);
unsigned long long BytesDowned = StreamCopier::copyStream64(*fileStream, encryptedFile);
encryptedFile.close();