我有大约30个独特的网站,我登录并从每个网站下载一些文件。有时我会有大约50个站点,其中20个站点与之前的站点相同但具有不同的登录凭据。
如果我为其中任何一个禁用所有其他网站运行下载过程,那么所有这些网站都可以正常运行。但是,如果我尝试一个接一个地下载它们,我通常会从40个网站获得大约5-10个错误!
发生的例外通常是socket error
,connection closed gracefully
或unknown error occured
!
现在,我为每个站点创建一个类,并在每个类中创建一个TIdHTTP
或TIdFTP
对象(很少有FTP,我没有任何问题)。当一个类的下载完成后,我销毁该类并销毁TIdHTTP
,并开始下一个类(或站点)的下载过程,因此下载不是并行。但是我在一开始就创建了大约40个TIdHTTP
和几个TIdFTP
个对象,并且我一个接一个地开始下载过程。
我的方法是否正确?或者我应该在所有类中只使用一个TIdHTTP
对象?但如果我必须这样做,我该如何刷新或重置它?有时我必须使用不同的凭据多次登录到一个站点。
我还应该提到我提出的一种方法确实有所帮助(可能解决了一两个错误!)是这样的:
// mMaxTryCount is 4 and mSleepInterval is 1000
for I := 1 to mMaxTryCount do
begin
if not(isSuccess) then
begin
if (i = mMaxTryCount) then
begin
responseCode.Clear;
idHttp.Post(URL, requestList, responseCode);
end
else
try
responseCode.Clear;
idHttp.Post(URL, requestList, responseCode);
isSuccess := true;
except
Sleep(mSleepInterval * (i + (i - 1)));
end;
end;
end;