Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2012, 20:16   #1
cardon
Пользователь
 
Регистрация: 04.12.2011
Сообщений: 13
По умолчанию Кеширующий прокси на основе IndyHttpProxyServer

Добрый день пробую написать свой кешируюший прокси.
На данный момент выбрал компонент IndyHttpProxyServer.

Сейчас имеем код
Код:
procedure TForm1.idhtprxysrvr1HTTPDocument(ASender: TIdHTTPProxyServer;
  const ADocument: String; var VStream: TStream;
  const AHeaders: TIdHeaderList);
var
  i: Integer;
  ext, file_patch, dir_file: String;
  isFileCache: Boolean;
const
  sExt: String = '.jpg.swf.gif.js.css.png.ico';
begin

  file_patch:= ADocument;
  i:= pos('?', file_patch);
  Delete(file_patch, i, Length(file_patch) - i + 1);

  i:= LastPos('.', file_patch);
  ext:= LowerCase( Copy(file_patch, i, Length(file_patch) - i + 1) );

  isFileCache:= pos(ext, sExt) > 0;

  if isFileCache then begin
    dir_file := write_file_cache(file_patch);
    if FileExists(dir_file) then begin
      mmo1.Lines.Add(IntToStr(VStream.Size));
      if VStream.Size > 10 then TMemoryStream(VStream).LoadFromFile(dir_file);
    end else begin
      TMemoryStream(VStream).SaveToFile(dir_file);
    end;
  end;


  if (page_tp = '') and (Pos('srv/user/bpxml?mode=backpack', ADocument) <> 0) then
  begin
 //  TMemoryStream(VStream).Read()
  end;
  
end;
Данный код срабатывает на событии OnHTTPDocument.
Но есть несколько подозрений
1) Событие OnHTTPDocument срабатывает когда уже полностью загружен файл из интернета из-за чего смысла в загрузке данных в поток с диска в данном событии смысла нет. Так ли это? Если да то на каком событии пробовать записывать данные в поток?
2) Так же есть подозрение что при сохранении через SaveToFile и загрузке через LoadToFile происходит замедление загрузки страницы т.д. обрабатывается все это не в потоке и ждет последующую загрузку/сохранения файла. Если так то как поправить? Есть идея что сохранять файлы надо каждый в отдельном потоке разбивая файл к примеру на 20 потоков и каждый поток читает к примеру по 50 байт и записывает в один файл. Тоже самое с чтением файла. 20 потоков считывает файл по 50 байт и записывают их в поток. Подскажите по этому поводу.
cardon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прокси crimemasta Софт 23 07.08.2011 16:20
Прокси volkafff Работа с сетью в Delphi 3 27.05.2011 16:13
Прокси FROSTMORN Безопасность, Шифрование 2 20.11.2008 15:17
Прокси russian-stalker Общие вопросы Delphi 1 07.09.2008 19:36