如何使用和稳定IdHttp用于大量网站

时间:2016-11-07 14:55:38

标签: delphi delphi-xe indy indy10 idhttp

我有大约30个独特的网站,我登录并从每个网站下载一些文件。有时我会有大约50个站点,其中20个站点与之前的站点相同但具有不同的登录凭据。

如果我为其中任何一个禁用所有其他网站运行下载过程,那么所有这些网站都可以正常运行。但是,如果我尝试一个接一个地下载它们,我通常会从40个网站获得大约5-10个错误!

发生的例外通常是socket errorconnection closed gracefullyunknown error occured

现在,我为每个站点创建一个类,并在每个类中创建一个TIdHTTPTIdFTP对象(很少有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;

0 个答案:

没有答案