Я написал простое приложение, использующее HTTP-библиотеку Pocos.Приложение загружает файл из заданного источника, расшифровывает и затем загружает его на 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();